有无哪位大哥大姐知道C\C++中怎样强制结构体紧凑分配空间?
我结构体定义如下:
typedef struct tagDLCHeader{
unsigned char DesMAC[6]; /* destination HW addrress */
unsigned char SrcMAC[6]; /* source HW addresss */
unsigned short Ethertype; /* ethernet type */
}DLCHEADER, *PDLCHEADER;
// ARP Frame
typedef struct tagARPFrame{
unsigned short HW_Type; /* hardware address */
unsigned short Prot_Type; /* protocol address */
unsigned char HW_Addr_Len; /* length of hardware address */
unsigned char Prot_Addr_Len; /* length of protocol address */
unsigned short Opcode; /* ARP/RARP */
unsigned char Send_HW_Mac[6]; /* sender hardware address */
unsigned long Send_Prot_IP; /* sender protocol address */
unsigned char Targ_HW_Mac[6]; /* target hardware address */
unsigned long Targ_Prot_IP; /* target protocol address */
unsigned char padding[18];
}ARPFRAME, *PARPFRAME;
// ARP Packet = DLC header + ARP Frame
typedef struct tagARPPacket{
DLCHEADER dlcHeader;
ARPFRAME arpFrame;
}ARPPACKET, *PARPPACKET; //各位大哥这个结构体中出了问题.
在struct tagARPPacket中我发现dlcHeader和arpFrame之间不知为什么多了一个字节,由于我是填充ARP包发送的,多了一个字节导致填充的数据错位,我在一个论坛上看到可以"加上一对编译指令,强制结构体紧凑分配空间,令多的那个字节消失",但那个论坛没有明确说出如何强制结构体紧凑分配空间,网上找了很久都找不到,听说CSDN高手如林,赶来求教!谢谢!
问题点数:30、回复次数:6Top
1 楼qi374420(表哥)回复于 2005-12-25 16:08:52 得分 0
自己顶,在线等!Top
2 楼qi374420(表哥)回复于 2005-12-25 16:23:52 得分 0
up,会不会没人知道呢?Top
3 楼lexchou(龍子龍孫)(本人已死)(有事烧纸)回复于 2005-12-25 16:32:55 得分 10
#pragma pack(1)Top
4 楼corrupt(喜欢 睡在床板下 的思考)回复于 2005-12-25 16:49:24 得分 20
#pragma pack(1)
本来是 4 的,这样就可以不用了
但是系统效率就 有点差了Top
5 楼qi374420(表哥)回复于 2005-12-25 16:51:42 得分 0
龙子龙孙大哥,请问是不是将#pragma pack(1)像头文件一样加在程序的开头?Top
6 楼qi374420(表哥)回复于 2005-12-25 16:59:03 得分 0
谢谢两位,结帐.Top




