一、为什么有大端小端的问题?
计算机中数据都是按字节为单位的,超过一个字节的数据在数据存储的过程中会有一个顺序的问题。有两种储存模式:
大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
小端模式:是指数据的低字节保存在内存的低地址中,而数据的高字节保存在内存的高地址中。
比如十六进制数int a=0x11223344;
存储器地址 | 0x100 | 0x101 | 0x102 | 0x103 |
大端模式 | 0x11 | 0x22 | 0x33 | 0x44 |
小端模式 | 0x44 | 0x33 | 0x22 | 0x11 |
二、什么是高位字节和什么是低位字节?
如下表所示每一个字节可以分8位 也是有顺序的 最高位就是MSB 最低位就是LSB
数据位 | Bit7(MSB) | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0(LSB) |
数据(0x11) | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
三、数据传输中的大端小端问题
在通信协议中,必须明确指定使用哪种字节序(如网络字节序,通常采用大端模式),以确保发送方和接收方能够正确地解释数据。否则,如果发送方使用大端而接收方使用小端(或反之),那么在数据传输过程中就可能会出现混乱。
四、常见的处理器大小端架构
由此可见:CPU的大小端是有硬件架构决定的。
常见的处理器大小端架构:
处理器 | 端模式 |
---|---|
IntelX86 | Little-Endian |
Power-PC | Big-Endian |
IBM | Big-Endian |
ARM | 默认 Little-Endian |
STM32 | Little-Endian |
五、C语言如何代码判断大小端
bool isLittleEndian(){
unsigned short a = 0x1218;
if( (*(char*)&a) == 0x18){
return true;
}else{
return false;
}
}
参考文献
一文彻底弄懂大端与小端_kingforyang的博客-CSDN博客_大端小端
发布评论