Modbus Register Decoder
Decode Modbus holding registers into int16, uint16, int32, uint32, and float32 across all four byte/word orders (ABCD, CDAB, BADC, DCBA). Free field tool.
Register 1 as a single 16-bit value
| Unsigned (uint16) | 17530 |
| Signed (int16) | 17530 |
| Hex | 0x447A |
| Binary | 0100 0100 0111 1010 |
Both registers as a 32-bit value, by byte order
| Order | uint32 | int32 | float32 |
|---|---|---|---|
| ABCD — big-endian | 1148846080 | 1148846080 | 1000 |
| CDAB — word swap | 17530 | 17530 | 2.456476e-41 |
| BADC — byte swap | 2051276800 | 2051276800 | 2.544225e+35 |
| DCBA — little-endian | 31300 | 31300 | 4.386064e-41 |
If the float looks like garbage, you have the wrong byte order — try another row. ABCD is the Modbus standard; CDAB (word swap) is the most common variation on PLCs and power meters.
Why the same registers show different numbers
A Modbus register is only 16 bits, so any value bigger than 65,535 — most floats and large counters — is split across two registers. The Modbus spec doesn't mandate how those two registers (and the bytes inside them) are ordered, so every vendor picked their own. Read the pair in the wrong order and a temperature of 72.5 comes back as 3.4×10³⁸.
| Order | Also called | Seen on |
|---|---|---|
| ABCD | Big-endian | Modbus standard, many transmitters |
| CDAB | Word swap / mid-little | Most PLCs, power/energy meters |
| BADC | Byte swap / mid-big | Some gateways and legacy gear |
| DCBA | Little-endian | A few Windows-derived devices |
The trick in the field: read a register whose real value you know (a setpoint, or a value the device's own display shows), try each order here until it matches, then use that order for every 32-bit value on the device. For the difference between the serial and Ethernet flavors of Modbus, see Modbus RTU vs Modbus TCP: when to use each.