字节序大小端转换

输入一个十六进制数值,看它按 16 位、32 位、64 位铺开时,大端序和小端序各是什么字节顺序。

允许 0x 前缀,空格、冒号、下划线分组都可以;奇数位会在左边补 0。最多 8 字节(64 位)。

输入十六进制数值后自动换算

大端和小端

一个多字节的整数在内存里要按字节排开,谁来打头有两种约定。大端序(big-endian)把最高位字节放在最低地址,读出来的顺序和人写十六进制时从左到右的习惯一致,0x12345678 存成 12 34 56 78。小端序(little-endian)把最低位字节放在最低地址,同一个数存成 78 56 34 12。工具里的「按小端解释」指的是输入的那串字节本身就是小端排列,会先把它当低位在前再还原成数值。

网络协议统一用大端,也就是常说的「网络字节序」。RFC 1700 和后续的 IETF 约定把多字节字段按大端传输,所以写 socket 代码时,主机上的 16 位、32 位整数要先经 htons、htonl 转成大端再发,收到的数据用 ntohs、ntohl 转回来。这样无论收发双方是什么 CPU,字节顺序都一致。

x86 和 x86-64 处理器用小端,这是从 8086 时代延续下来的设计:小端下把 16 位值当两个 8 位分量取用时,低字节的地址偏移是 0,做类型转换和强制截断不需要额外搬移。ARM 两种模式都支持,但主流操作系统默认跑小端;网络设备、部分 PowerPC 和大型机则常用大端。正因为两边不一致,跨机器传二进制时才需要统一约定或显式转换。

实际工作里踩坑最多的是二进制文件格式和协议解析。PNG、JPEG、网络包普遍是大端,BMP、WAV 的许多字段是小端,ELF 文件头里还专门有一个字节标明本文件的字节序。调试时如果数字看起来大得离谱(比如读出来是 0x78563412 而不是 0x12345678),大概率就是把小端数据当大端读了,用本工具把两边的字节排列对一下就很容易定位。