关于结构体类型数据的强制类型转换
zzjb 2005-09-15 08:33:39 有如下结构体定义:
typedef struct cemsg
{
uchar dl;
uchar mg;
uchar data[10];
}CEMSG;
typedef struct msg{
uchar id;
uchar cmd;
uchar byte[4];
}MSG;
typedef struct msg_p{
uchar id;
uchar cmd;
uchar far * ptr;
}MSG_P;
void ap_getmsg(MSG *d_OsMsgPtr,CEMSG *d_CeMsgPtr)
{
MSG_P *d_p;
d_p = ( MSG_P * )d_OsMsgPtr;
cpy( d_CeMsgPtr, d_p->ptr, ( ushort )(( CEMSG far* )d_p->ptr )->dl + 1 );
}
注:其中cpy(dest,src,n)函数的功能是把src开始的n byte数据copy到dest开始的数据区域内。
在仿真调试中:
程序进入函数时,d_OsMsgPtr的个数据项地址及值如下:
地址d_OsMsgPtr---0x00ffb21c ; d_OsMsgPtr->byte[4]---0x00ffb21e
值d_OsMsgPtr->id==0x0c;d_OsMsgPtr->cmd == 0x11; d_OsMsgPtr->byte[0]==0xD4;d_OsMsgPtr->byte[1]==0xD0;d_OsMsgPtr->byte[2]==0xFF;d_OsMsgPtr->byte[3]==0x00;
当函数执行完d_p = ( MSG_P * )d_OsMsgPtr;这句时:
地址d_p---0x00ffb21c ; d_p->ptr---0x00ffD0D4
值d_p->id==0x0c;d_p->cmd == 0x11; *d_p->ptr==0x06;
q