Dev tool

字节序转换

粘贴一段十六进制字节,同时给出大端和小端的解释结果;也可以反过来, 把一个数值拆成两种字节序的字节序列。

十六进制字节

支持 12 34 56 78、12345678、0x12,0x34 等写法

同 一 组 字 节 · 两 种 解 释
按什么读 大端(Big-Endian) 小端(Little-Endian)
输入字节后自动计算
值 → 字节
—
字节明细
—

怎么读这个结果

同一个字节序列 12 34 56 78,按大端读出来是 0x12345678(十进制 305419896),按小端读出来是 0x78563412(十进制 2018915346)。

页面里每一行对应一种「解释宽度」:u16 / i16 是按 2 字节读, u32 / i32 / f32 是按 4 字节读, f64 是按 8 字节读。宽度超过输入长度时不会显示,避免误导。

什么时候需要转换

  • 网络协议:TCP/IP 头部规定用大端,从抓包数据还原字段时要换
  • 跨架构读取:x86 机器写出的小端文件,在大端设备上读会完全错位
  • 芯片寄存器:手册里给的通常是数值,实际总线上的字节顺序要自己拼
  • 二进制文件解析:PNG / JPEG 用大端,BMP / WAV 用小端
这个页面没有后端。字节解析在你浏览器里完成,数据不会上传。

常见问题

大端和小端到底差在哪?

差在多字节数据里「高位字节放前面还是后面」。大端(Big-Endian)把最高有效字节放在最低地址,读起来像我们写数字的顺序;小端(Little-Endian)把最低有效字节放在最低地址。同一个 32 位值 0x12345678,大端在内存里是 12 34 56 78,小端是 78 56 34 12。

哪些场景会遇到字节序问题?

最常见的是网络协议(TCP/IP 规定用大端,也就是「网络字节序」)、x86 与 ARM 交换文件、读取传感器或芯片寄存器、解析二进制文件格式(PNG 用大端,BMP 用小端)。跨架构通信时不转换,数值就会完全错乱。

浮点数也会受字节序影响吗?

会。浮点数的位模式同样是多字节的,按大端或小端存放,读出来就是完全不同的值。页面里 f32 / f64 两行就是这个原因——同样的 4 个字节,按大端读可能是 1.0,按小端读可能是 -1.7e38 这种数字。

ARM 一定是小端吗?

不一定。ARM 支持双端模式,可以通过 CPSR 的 E 位切换;RISC-V 规范里数据内存访问固定为小端,但部分实现支持大端指令流。所以实际对接时,一定要查具体芯片手册,不能凭架构猜。