字节序

来源:互联网 发布:小绳淘宝 编辑:程序博客网 时间:2024/05/16 10:00

字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。
一般指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。跟多字节类型的数据有关,比如int,short,long型,而对单字节数据byte却没有影响。

1. Little Endian:将低序字节存储在起始地址
2. Big Endian:将高序字节存储在起始地址

比如 int a = 0x08070605
在Little Endian的情况下存放为:
字节号:  0    1   2  3
数    据: 05 06 07 08

在Big Endian的情况下存放为:
字节号:  0   1   2  3
数   据: 08 07 06 05


又比如数字0x87654321,在两种不同字节序CPU中,其存储顺序如下所示:
Little Endian
低地址---------------------->高地址
             | 21 |43 | 65 | 87 |
  
Big Endian
低地址--------------------->高地址
           | 87 |65 | 43 |21 |

从上面可以看出:
采用Little Endian方式存储数据,低位地址存放低位数据,可以用“低对低”来方便记忆与理解。
采用Big Endian方式存储数据,从书写习惯上看,高位数据排列在前面(低址在前面),可以用“高位在前”来简化理解。

Little Endian最符合人的思维的字节序:地址低位存储值的低位,地址高位存储值的高位。
Big Endian最直观的字节序:地址低位存储值的高位,地址高位存储值的低位。只需要把内存地址从左到右按照由低到高的顺序写出,把值按照通常的高位到低位的顺序写出,两者对照,一个字节一个字节的填充进去。

例子:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为:
内存地址  Big Endian   Little Endian
 0x0000      0x12         0xcd
 0x0001      0x34         0xab
 0x0002      0xab         0x34
 0x0003      0xcd         0x12
x86系列CPU都是Little Endian的字节序。


判断机器大端序和小端序

0 0
原创粉丝点击