大端存储与小端存储

参考博客:http://blog.csdn.net/fy_lei/article/details/49813137

小端存储:数据的低字节存储在低地址上。

小端存储示意
内存地址 存储数据
0x00000000 0x78
0x00000001 0x56
0x00000002 0x34
0x00000003 0x12

 

 

 

 

 

 

大端存储:数据的低字节存储在高地址上。

大端存储示意
内存地址 存储数据
0x00000000 0x12
0x00000001 0x34
0x00000002 0x56
0x00000003 0x78

 

 

       、

 

 

 

 

对于这两种存储方式,如果联系下我们常用  “异或”  操作,就能得到一个很好的记忆规则。总结来说就是:

    (1)低地址存储低字节即为小端存储;高地址存储高字节即为小端存储;

     (2)低地址存储高字节即为大端存储;高地址存储低字节即为大端存储;

对于一个32位的机器,一个字节为8位,字是最小的存储单位是字节,32位对应有4个字节。

 如果对一个32位的数据,要求从大端存储转换为小端存储的代码为:

 

uint32_t swap_endian(uint32_t val) {
    val = ((val << 8) & 0xFF00FF00) | ((val >> 8) & 0xFF00FF);
    return (val << 16) | (val >> 16);
}

 

posted @ 2018-03-18 19:22 amazingym 阅读(...) 评论(...) 编辑 收藏