TI中文支持网
TI专业的中文技术问题搜集分享网站

关于C6472的一个小问题

最近在写一个简单的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()内联函数  后来解决了  谢谢回答~~

赞(0)
未经允许不得转载:TI中文支持网 » 关于C6472的一个小问题
分享到: 更多 (0)