📘 读 Modbus 浮点遇到字节序问题?见 Modbus 通讯专题 第 3 阶段 →

IEEE754 浮点 · 字节序 · 进制转换工具

解决什么问题:PLC 读到两个寄存器却拼不出正确浮点数、不知道是 ABCD 还是 CDAB? 把 4 个字节粘进来,四种字节序结果一次全算出来,挑数值正常的即可,不用再猜大小端。全程浏览器本地计算。

1 寄存器 / HEX → 浮点(自动算四种字节序)

输入 4 个字节(两个 16 位寄存器),支持「40 48 F5 C3」「4048 F5C3」「0x4048F5C3」等写法。

输入 4 字节后自动列出四种字节序

2 浮点 → HEX / 两个寄存器(四种字节序)

输入一个十进制浮点数,得到四种字节序的 HEX 及对应的两个 Modbus 寄存器值。

3 整数进制互转(DEC / HEX / BIN,含有符号解释)

任意一栏输入,其余两栏自动联动;同时给出 Int16/Int32 有符号解释。

在上方任一格输入即可

四种字节序对照(以 3.14 ≈ 0x4048F5C3 为例)

字节序线上字节两个寄存器(16#)常见设备
ABCD 大端40 48 F5 C34048 / F5C3标准网络序、多数 Modbus TCP
BADC 字节交换48 40 C3 F54840 / C3F5部分字内翻转模块
CDAB 字交换F5 C3 40 48F5C3 / 4048西门子 S7-1200/1500 常见
DCBA 小端C3 F5 48 40C3F5 / 4840x86、部分网关

常见问题

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 传输),显示时再换算。

配套的通讯 / 数据采集软件

延伸教程

← 返回在线工具总览