http://blog.csdn.net/yasaken/article/details/7243757 大小端问题
跨字节位域大小端转换实例讲解
注:结构体整体当做U16/U32来赋值时才会产生这种问题,如果是按字节或者移位方式访问则没有问题
typedef struct
{
U16 a:2;
U16 b:3;
U16 c:11;
}S_BIT_SAMPLE;
//测试程序
VOS_VOID BigEndianDomainFiledTest(VOS_VOID)
{
S_BIT_SAMPLE *ps = NULL;
VOS_UINT16 u = 0x0a0b;
ps = (S_BIT_SAMPLE *)&u;
#if 0
printf("a=%d,b=%d,c=%d\n", ps->a, ps->b, ps->c);
#else
NM_PRINT(GBSC_PID_NM, PNT_LEV_ERROR, "BigEndianDomainFiledTest :a=%d,b=%d,c=%d",ps->a, ps->b, ps->c);
#endif
}
1)在大端CPU上的结果:a=0,b=1,c=523
内存地址:低--》高
0000 1010 0000 1011(每个字节内从左到右分别是数值的高位到低位)
a=00 b=001 c=010 00001011
2)在小端CPU上的结果:a=3,b=2,c=80
内存地址:低--》高
0000 1011 0000 1010
b=010 a=11 c=000 01010000