最近在写一个简单的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上面可以无错运行,谢谢各位。
noaming:
“也就是说pBuf的内存地址内被4整除,而pIpHdr指向内存只能被2整除”,这个问题,你可以设置,让pIpHdr指向的地址为pBuf指向的地址基础上加一个2与4的公倍数不就可以了。
Hydrogen Chen:
回复 noaming:
pIpHdr指向的地址的确是2的倍数,我后来找了编译器手册,使用了_mem4()内联函数 后来解决了 谢谢回答~~