This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于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上面可以无错运行,谢谢各位。