bcb 编译问题
我有如下代码:
typedef struct arpHead
{
unsigned short hardware_type; //硬件类型
unsigned short protocol_type; //协议类型
unsigned char add_len; //硬件地址长度
unsigned char pro_len; //协议地址长度
unsigned short option; //操作号
unsigned char Sour_MacAddr[6]; //发送者硬件地址
unsigned long Sour_IP; //发送者协议地址
unsigned char Dest_MacAddr[6]; //目的站硬件地址
unsigned long Dest_IP; //目的站协议地址
}ARPHDR;
ARPHDR ArpHead;
//填充ARP报头
ArpHead.hardware_type=htons(0x1);
ArpHead.protocol_type=htons(0x0800);
ArpHead.add_len=6;
ArpHead.pro_len=4;
ArpHead.option=htons(0x1);
ArpHead.Sour_MacAddr[0]=0x00;
ArpHead.Sour_MacAddr[1]=0x11;
ArpHead.Sour_MacAddr[2]=0x11;
ArpHead.Sour_MacAddr[3]=0x43;
ArpHead.Sour_MacAddr[4]=0xAA;
ArpHead.Sour_MacAddr[5]=0x17;
//--------------------有问题这样造成数据结构无法定位-------------------
ArpHead.Sour_IP=inet_addr("172.16.106.35");
//查看内存发现ArpHead.Sour_IP少了两字节数据,少的到那里去了,发现在ArpHead.Dest_MacAddr[0]和ArpHead.Dest_MacAddr[1]里面的,错开了2个字节
for(int i=0;i<6;i++){
ArpHead.Dest_MacAddr[i]=0xFF; //同样的问题,
};
ArpHead.Dest_IP=inet_addr("172.16.106.6");//同样的问题,
//---------------------------------------
//------------------这样写是对的 但完全是无法理解----------------------
int t1=inet_addr("172.16.106.35");
memcpy(&ArpHead.Sour_MacAddr[5]+1,&t1,4); //我不知为什么这样可以 可能是BCB有问题
for(int i=0;i<6;i++){
memset(&ArpHead.Dest_MacAddr[i]-2,0xFF,1);
}; //我不知为什么这样可以 可能是BCB有问题
int t2=inet_addr("172.16.106.6");
memcpy(&ArpHead.Dest_MacAddr[5]-1,&t2,4); //我不知为什么这样可以 可能是BCB有问题
//---------------------------------------------