字节序不仅仅是在字符存储中的概念、在内存中、网络传输中也存在字节序的概念。
1 主机字节序和CPU
不同架构的处理器,支持不同的字节序,有些是大端、有些是小端、有些是双端。
比如: X86–>小端 PowerPC–>大端 ARM–>双端
注:双端意味着我们可以二选一。
2 主机字节序和操作系统
实际的情况是,一旦选择了特定的操作系统,那么字节序也就固定下来了。Android操作系统、IOS操作系统、windows操作系统,它们都只能运行在小端模式下。所以,在我们选定了操作系统的同时,字节序也就随之固定了下来。由于这里所讲的字节序是和计算机平台相关的,所以,我们也称之为主机字节序。
3 主机字节序决定了什么
主机字节序决定了一个多字节数据,在内存中的排列方式。
int a = 0x12345678;
大端(BE): 从高字节开始存储(高字节存到低地址内存)
小端(LE): 从低字节开始存储(低字节存到低地址内存)
4 主机字节序对我们有影响吗
从程序运行的角度来说,主机字节序对我们是没有影响的,怎么理解呢?
- 计算机按照大端法加载数据到内存,同时它也将按照大端法来解析内存中的数据。
- 计算机按照小端法加载数据到内存,同时它也将按照小端法来解析内存中的数据。
主要在如下两个方面会有点影响:
-
当我们需要查看程序的机器指令时:
LE平台 --> mov ax,0x0102 --> A1 02 01
–> 在LE平台上,机器指令中的数据是实际数据的反序 -
网络编程时 --> 网络字节序(大端)–> 它与平台无关,是为了解决网络传输问题所制定的一个规则。
5 为什么不统一主机字节序
主机字节序的选择,是一种二选一的情况,选择了一方,就必然丢了另一方。而到底选择哪种主机字节序,是所有硬件厂商需要考虑的问题,这不是我们能够决定的。