大小端问题

来源:互联网 发布:mac推出键 编辑:程序博客网 时间:2024/05/17 22:58

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



0 0
原创粉丝点击