|
typedef struct
{
uchar src_mac_id :8;
uchar dest_mac_id :8;
uchar ack :1;
uchar func_id :4;
uchar source_id :8;
} can_header_t;
我定义了这样一个结构体。
然后在程序里:
uchar canbuf[12];
/*中间略去,就是canbuf的赋值*/
/*canbuf前4字节内容为: 0x01 0x55 0xA0 0x10*/
header = canbuf;
这时我查看header指向的值发现
header->src_mac_id 0x01
header->dest_mac_id 0x55 /*整字节对齐没有问题*/
header->ack 0
header->func_id 0
header->source_id 8
同时canbuf中的值没有变,所以两者对照
canbuf中: 0000 0001 0101 0101 1010 0000 0001 0000
header(按显示的) 0000 0001 0101 0101 0000 0000 0000 1000
很明显当非整字节时,位对齐就出了问题。
请问这是由于编译器造成的吗?我用的是keil c51编译器
如何解决这个位对齐的问题呢?
|
|