读书人

强制字节对齐方式,该如何处理

发布时间: 2012-03-18 13:55:39 作者: rapoo

强制字节对齐方式
刚才的问题
http://community.csdn.net/Expert/topic/5409/5409821.xml?temp=.3010675
很感谢大家的热烈回答

现在我的问题是如何使他发送的数据包是60个字节的

我用ARPPACKET填充数据包,发送前还要把他给一个char类型
u_char packet[60]={0};
ARPPACKET arpPacket;
//填充arpPacket
memcpy(packet,&arpPacket,60);
然后就是发送packet数据包了

如何使packet不考虑对齐?把arpPacket复制给packet


[解决办法]
试试
#pragma pack(0)
吧。
[解决办法]
#pragma pack(push, 1)

typedef struct tagDLCHeader
{
unsigned char DesMAC[6]; //这个长度是6
unsigned char SrcMAC[6]; //这个长度是6
unsigned short Ethertype; //这个长度是2

} DLCHEADER, *PDLCHEADER;

typedef struct tagARPFrame
{
unsigned short HW_Type; 这个长度是2
unsigned short Prot_Type; 这个长度是2
unsigned char HW_Addr_Len; 这个长度是1
unsigned char Prot_Addr_Len; 这个长度是1
unsigned short Opcode; 这个长度是2
unsigned char Send_HW_Addr[6]; 这个长度是6
unsigned long Send_Prot_Addr; 这个长度是4
unsigned char Targ_HW_Addr[6]; 这个长度是6
unsigned long Targ_Prot_Addr; 这个长度是4
unsigned char padding[18];这个长度是18
} ARPFRAME, *PARPFRAME;

typedef struct tagARPPacket
{
DLCHEADER dlcHeader;
ARPFRAME arpFrame;
} ARPPACKET, *PARPPACKET;

#pragma pack(pop)

[解决办法]
也可以修改编译选项里面的东西,使1字节对齐
[解决办法]
#pragma pack(push, 1)和#pragma pack(pop)是什么意思哟
我发现只有visual studio编译器才有。。。

读书人网 >C++

热点推荐