首页 > 代码库 > 关于大小端问题和字节序问题的一些总结

关于大小端问题和字节序问题的一些总结


1、大小端是不同的对于数据在内存地址中的存放方式,不同的处理器(平台)的数据存储方式是不同。的如果
实现跨平台通信则大小端是不能忽视的问题。
大端模式:数据的高位存储在内存的低字节。ARM/PowerPC等处理器采用大端模式
小端模式:数据的地位存储在内存的低字节。Intel架构处理器采用小端模式。
如一个数据:0x12345678;对应内纯地址是0x00~0x03。
大端模式: 小端模式:
地址:0x00 0x01 0x02 0x03 地址:0x00 0x01 0x02 0x03
数据:0x12 0x34 0x56 0x78 数据:0x78 0x56 0x34 0x12
2、字节序对应着内存的存储(组织)模式,如网络字节序采用大端模式。
3、字节序只是对内置的数据类型而言(int、short、double、long....char)而对于char而言由于其本身只有一个
字节则字节序和存储模式对其不影响。(因此字符串在跨平台传输时不用考虑字节序)
4、单字节内纯中的比特为不受字节序的影响,大于1个字节的数据类型,字节序才对其有影响。
引申:网络通讯中字节序的影响。
在网络通讯中对端口和IP地址进行了字节序的转换而未对发送的数据进行字节序的转换的一些思考:
对于同平台的网络通信而言发送的数据是不需要进行字节类型转换的,字节始终是以二进制的形式存放不管是在何种
平台下都是1个字节8个BIT,而字节序所影响的只是对我们的读取数据的影响,如果在同一平台下通讯则字节序不会对
我们的读取有影响。如在进行网络通信是网络只是数据的传输介质而不需要对数据进行解读,对数据进行解读的是我们
数据的接收方。所以在同平台中的网络通信中不必要对传输的数据进字节序的转换。当然跨平台中进行通信时是需要对
数据的字节序进行转换的(可以在接收方也可以在发送方)。
在基于TCP/UDP进行网络通信时对端口和IP地址进行的字节转换只是在网络通信中这两个数据是给网络通信的数据
只有经过字节序转换之后网络中的协议等才能够识别我们的数据。(个人认为如果在网络通信中通信两端都不进行端口或IP)
的字节序转换时通信也是能够完成的只是此时网络中识别的端口和IP和我们实际想设定的端口和IP是不一致的)。

关于大小端问题和字节序问题的一些总结