字节序(Endianness)类型的完整详解及存储方式分类

N3N3昨天21 阅读0 评论

一、字节序核心类型

1. 小端序(Little-Endian)

定义:最低有效字节(LSB) 存储在最低内存地址


存储顺序:

低地址 → 高地址:Byte0 (LSB) → Byte1 → Byte2 → Byte3 (MSB)


示例(32位数据 0x12345678):


text

地址递增方向:0x78 → 0x56 → 0x34 → 0x12  

内存布局:78 56 34 12  

别名:DCBA(若按寄存器顺序:D=低字, C=高字)


应用:x86/x64 CPU、Windows/Linux桌面系统、USB协议、ARM(默认小端模式)


2. 大端序(Big-Endian)

定义:最高有效字节(MSB) 存储在最低内存地址


存储顺序:

低地址 → 高地址:Byte0 (MSB) → Byte1 → Byte2 → Byte3 (LSB)


示例(32位数据 0x12345678):


text

地址递增方向:0x12 → 0x34 → 0x56 → 0x78  

内存布局:12 34 56 78  

别名:ABCD(A=高字, B=低字)


应用:网络协议(TCP/IP)、Java虚拟机、PowerPC、Motorola处理器、Modbus(默认大端)


二、混合字节序(字交换序)

用于解决 16位寄存器组合为32位数据 时的特殊对齐问题


1. 小端字交换(Little-Endian Word-Swap)

定义:字内小端 + 字间大端

(先按16位字分组,组内小端,组间大端)


存储顺序:

低地址 → 高地址:Word1 (低字) → Word0 (高字)

其中每个Word内部为小端序


示例(0x12345678):


text

步骤1:拆分为两个16位字 [0x1234] 和 [0x5678]  

步骤2:字内小端存储 → 0x34 12 (高字) 和 0x78 56 (低字)  

步骤3:字间大端排列 → 先存高字,再存低字  

最终内存布局:34 12 78 56  

别名:BADC(B=高字低字节, A=高字高字节, D=低字低字节, C=低字高字节)


应用:TI DSP、某些ARM嵌入式设备


2. 大端字交换(Big-Endian Word-Swap)

定义:字内大端 + 字间小端

(先按16位字分组,组内大端,组间小端)


存储顺序:

低地址 →高地址:Word0 (低字) → Word1 (高字)

其中每个Word内部为大端序


示例(0x12345678):


text

步骤1:拆分为两个16位字 [0x1234] 和 [0x5678]  

步骤2:字内大端存储 → 0x12 34 (低字) 和 0x56 78 (高字)  

步骤3:字间小端排列 → 先存低字,再存高字  

最终内存布局:12 34 56 78 → 看似与大端相同,但实际逻辑不同!  

别名:CDAB(C=低字高字节, D=低字低字节, A=高字高字节, B=高字低字节)


应用:某些PLC系统(如三菱FX系列)、CAN总线数据帧


三、完整字节序类型对照表(32位数据)

类型 别名 存储顺序(低地址→高地址) 寄存器排列 典型应用场景

Big-Endian ABCD 0x12 0x34 0x56 0x78 寄存器1:0x1234 (高字) 网络设备、Modbus

寄存器2:0x5678 (低字)

Little-Endian DCBA 0x78 0x56 0x34 0x12 寄存器1:0x5678 (低字) x86 CPU、Windows

寄存器2:0x1234 (高字)

Big-Endian Word-Swap CDAB 0x34 0x12 0x78 0x56 寄存器1:0x3412 (高字) 三菱PLC、CAN协议

寄存器2:0x7856 (低字)

Little-Endian Word-Swap BADC 0x56 0x78 0x12 0x34 寄存器1:0x7856 (低字) TI DSP、嵌入式系统

寄存器2:0x3412 (高字)

Mid-Big-Endian DCAB 0x78 0x56 0x12 0x34 寄存器1:0x5678 (低字) 极少见(历史遗留系统)

Mid-Little-Endian BADC 0x34 0x12 0x56 0x78 寄存器1:0x1234 (高字) 罕见

寄存器排列说明(以两个16位寄存器存储32位数据为例):


寄存器1:物理地址较低的寄存器


寄存器2:物理地址较高的寄存器


四、特殊类型详解

1. Mid-Big-Endian (DCAB)

存储顺序:Byte3 → Byte2 → Byte1 → Byte0

(即先存最低两字节的小端,再存最高两字节的小端)


示例:0x12345678 → 78 56 12 34


应用:PDP-11等老式系统(已淘汰)


2. Mid-Little-Endian (BADC)

存储顺序:Byte1 → Byte0 → Byte3 → Byte2

(即先存中间两字节,再存两端字节)


示例:0x12345678 → 34 12 78 56


应用:极少见(某些自定义协议)


The End 微信扫一扫

文章声明:以上内容(如有图片或视频亦包括在内)除非注明,否则均为Net3C原创文章,转载或复制请以超链接形式并注明出处。
定制服务:需要定制服务请加V:Net3c_2022

上一篇 下一篇

相关阅读

发表评论

访客 访客
快捷回复: 表情:
评论列表 (暂无评论,21人围观)

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码