大端存储与小端存储
参考博客: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); }