知道X86小头"字节序",在编程过程中需注意什么呢?

时间:2022-11-30 19:46:46
由于历史的原因,业界存在两种字节序标准:BigEndian和LittleEndian,Power PC是大头,X86是小头,有些CPU可以通过寄存器设置支持不同的字节序,例如MIPS;

所谓大头就是高位在低字节,低位在高字节;小头则与此相反,以0x12345678为例,大头内存从低到高的存放次序为12,34,56,78,小头内存从低到高的存放次序为78,56,34,12;(上面的数值统一为16进制表示形式)

5 个解决方案

#1


如果跨字节序的机器通信,且没有上层协议处理字节序问题,则需要处理字节序相关问题。
如果跨机器,建议增加UINT8的类型,(unsigned char),这个值大小端都一样,再根据这个类型来处理收到的信息。
如果是通样的机器,对于字节序,代码部分不可见。不需要特意处理

#2


大小端的时候对于字节类型的操作没什么影响,但是在short,long或者struct等类型向char类型转换的时候应该注意一点,好比一个short a = 0x0001,你想取数就得注意了char *m = (char *)&a;这就得看大小端了,具体内容你懂得

#3


大多用于通信

#4


哦。大多在数据通信方面应用到了。

#5


注意不要写依赖这些细节的代码。
在写网络应用时注意字节序的转换。

#1


如果跨字节序的机器通信,且没有上层协议处理字节序问题,则需要处理字节序相关问题。
如果跨机器,建议增加UINT8的类型,(unsigned char),这个值大小端都一样,再根据这个类型来处理收到的信息。
如果是通样的机器,对于字节序,代码部分不可见。不需要特意处理

#2


大小端的时候对于字节类型的操作没什么影响,但是在short,long或者struct等类型向char类型转换的时候应该注意一点,好比一个short a = 0x0001,你想取数就得注意了char *m = (char *)&a;这就得看大小端了,具体内容你懂得

#3


大多用于通信

#4


哦。大多在数据通信方面应用到了。

#5


注意不要写依赖这些细节的代码。
在写网络应用时注意字节序的转换。