IEEE754 浮点 · 字节序 · 进制转换工具
1 寄存器 / HEX → 浮点(自动算四种字节序)
输入 4 个字节(两个 16 位寄存器),支持「40 48 F5 C3」「4048 F5C3」「0x4048F5C3」等写法。
2 浮点 → HEX / 两个寄存器(四种字节序)
输入一个十进制浮点数,得到四种字节序的 HEX 及对应的两个 Modbus 寄存器值。
3 整数进制互转(DEC / HEX / BIN,含有符号解释)
任意一栏输入,其余两栏自动联动;同时给出 Int16/Int32 有符号解释。
四种字节序对照(以 3.14 ≈ 0x4048F5C3 为例)
| 字节序 | 线上字节 | 两个寄存器(16#) | 常见设备 |
|---|---|---|---|
| ABCD 大端 | 40 48 F5 C3 | 4048 / F5C3 | 标准网络序、多数 Modbus TCP |
| BADC 字节交换 | 48 40 C3 F5 | 4840 / C3F5 | 部分字内翻转模块 |
| CDAB 字交换 | F5 C3 40 48 | F5C3 / 4048 | 西门子 S7-1200/1500 常见 |
| DCBA 小端 | C3 F5 48 40 | C3F5 / 4840 | x86、部分网关 |
常见问题
ABCD、CDAB、BADC、DCBA 四种字节序是什么意思?
一个 32 位浮点数占 4 个字节,记作 A(最高)B C D(最低)。不同 PLC/协议在内存和总线上摆放顺序不同:ABCD 是标准大端(高位在前);DCBA 是小端(低位在前);CDAB 是两个 16 位字整体互换(西门子 S7 常见);BADC 是每个字内部高低字节互换。选错字节序,浮点就会变成天文数字或乱码。
PLC 读上来的两个寄存器,怎么拼成浮点数?
一个 32 位 float 正好占两个 16 位保持寄存器。把读到的两个字按顺序写成 4 个字节(如 16#4048、16#F5C3 → 40 48 F5 C3),粘进本工具,它会一次算出全部四种字节序对应的浮点,数值正常、量级合理的那个就是正确字节序,无需反复试。
IEEE754 单精度浮点数在内存里怎么存?
单精度 float 共 32 位:1 位符号位 + 8 位指数位 + 23 位尾数位。例如 1.0 的机器数是 0x3F800000,3.14 约为 0x4048F5C3。它只有约 7 位十进制有效数字,所以像 123.456 这类数无法精确表示,转换回来出现 123.456001 这样的尾差是正常现象,不是算错。
西门子、三菱、Modbus 设备一般用哪种字节序?
西门子 S7-1200/1500 默认多为 CDAB(字交换,也称 Big-Endian byte swap);三菱、多数 Modbus TCP 设备和标准网络序常用 ABCD 大端;部分 x86 网关、国产模块可能是 DCBA 小端或 BADC。最稳妥的办法不是背结论,而是写一个已知值(如 1.0=3F800000)读回来看哪种顺序对得上。
为什么浮点转出来和我预期差一点点?
这是 IEEE754 单精度的固有量化误差:23 位尾数决定了它只有约 7 位有效数字,十进制小数多数无法用二进制精确表示。工程量、累计量等高精度场景应使用双精度或整数定标(如放大 1000 倍用 Int32 传输),显示时再换算。