| # | 输入 hex | 输出 hex | 无符号 | 有符号 | 二进制 |
|---|
这是字节序转换器:把多字节 hex 值在内存里的顺序对调。 Endianness 是多字节值在内存中的字节顺序。big-endian、little-endian、PDP、uint32_t、htons、htonl、RFC 1700、__builtin_bswap 等标识不翻译。0x12345678 的 big-endian 内存是 12 34 56 78(MSB 在前,网络字节序)。little-endian(x86、ARM)是 78 56 34 12。PDP / 中间端是 34 12 78 56。显示示例就是这 4 字节、32 位、big-endian → little-endian。两个 32 位字 AA BB CC DD 11 22 33 44 交换后是 DD CC BB AA 44 33 22 11;全部倒序则是 44 33 22 11 DD CC BB AA。
0x 会被去掉。除非全部倒序,长度必须是 2、4 或 8 字节的倍数。uint16_t / htons)、32 位(uint32_t / htonl)或 64 位(htobe64)。每个字单独转换。__builtin_bswap 的 C 片段。格子就是调试器里的 dump:左边是地址 0。big-endian 和人写 hex 的顺序一致。little-endian 把最低有效字节放在最低地址,所以 0xDEADBEEF 的 dump 是 EF BE AD DE。无符号是按源字节序解码后的整数;有符号是同宽度补码。单字节(uint8_t)没有字节序。
TCP/IP 字段是 big-endian(RFC 1700)。在 little-endian 主机上,16 位端口用 htons/ntohs,32 位用 htonl/ntohl。GCC/Clang 的 __builtin_bswap16/32/64 会编成 BSWAP;MSVC 用 _byteswap_ushort / _byteswap_ulong。Modbus 寄存器是 16 位 big-endian;跨两个寄存器的 32 位 float 还可能有字序(AB CD 与 CD AB)。交换 IEEE 754 时用 memcpy 进 uint32_t,不要写 *(uint32_t*)&f。
PDP-11 把 32 位值存成两个 16 位字(字序 big-endian,字内 little-endian),所以 0x12345678 变成 34 12 78 56。部分工控设备仍用混合序。16 位 PDP 就是对调两个字节。
AA BB CC DD 11 22 33 44。