什么是大端,小端?
1. 大端模式(Big Endian)定义:高位字节(Most Significant Byte, MSB)存储在低地址,低位字节(Least Significant Byte, LSB)存储在高地址。特点:如果把存储的数据读出来,地址由小向大增加,而数据从高位往低位放,数据存储顺序与人类阅读习惯相同。应用场景:网络协议(如TCP/IP)、某些大端架构处理器(如PowerPC)。举例假设有一个32位整数,4个字节, 0x12345678,这里的0x12是高字节,0x78是低字节
大端模式的存储顺序如下:高字节存储在低地址
2. 小端模式(Little Endian)定义:低位字节(LSB)存储在低地址,高位字节(MSB)存储在高地址。特点:数据存储顺序与二进制加权方式一致(从低位到高位)。应用场景:Intel x86 系列处理器、ARM 默认模式。举例同样的32位整数 0x12345678,小端存储顺序如下:
首先明确一个概念:大端、小端是针对多字节数据来说的,以字节为单位。
单字节传输(8位数据位)
在典型的串口通信中,每次传输 1 字节(8 位),并没有涉及大小端的问题,因为字节内的位序是固定的:低位先传,高位后传。多字节数据传输(例如 16 位、32 位或更多)
小端模式:低字节(低位)先发送,高字节(高位)后发送。大端模式:高字节(高位)先发送,低字节(低位)后发送。 多字节传送的情况,大小端取决于你的应用协议或双方的约定,通常采用大端模式,和我们的阅读习惯相同即从左向右传送,在左边的字节先传送。总结一下:从高字节的低位先发存储系统可以通过以下代码测试系统是小端存储还是大端存储int main() { int num = 1; if (*(char*)&num == 1) printf("Little Endian
"); else printf("Big Endian
"); return 0; } |