最近在写一个简单的UDP协议,碰到了如下问题,代码如下:
pIpHdr = (IP_HDR*)(pBuf + ETH_HDR_SIZE); //ETH_HDR_SIZE为一个宏定义,值为14
memset(pIpHdr, 0, IP_HDR_SIZE);
pIpHdr->version = 4;
pIpHdr->hdrLen = 5;
pIpHdr->tos = 0;
pIpHdr->totLen = htons((Uint16)(bufLen-ETH_HDR_SIZE));
pIpHdr->id = index ++;
pIpHdr->fragOff = 0;
pIpHdr->ttl = 128;
pIpHdr->protocol = protocol;
pIpHdr->chkSum = 0;
pIpHdr->srcAddr = 0x12345678;
pIpHdr->dstAddr = 0x87654321;
pIpHdr 指向内存情况如图所示:
pBuf指向内存如图所示:
也就是说pBuf的内存地址内被4整除,而pIpHdr指向内存只能被2整除,导致 pIpHdr->srcAddr , pIpHdr->dstAddr 两个32位数据错位2个字节,如何才能解决这个问题,这个程序在VC上面可以无错运行,谢谢各位。

