Modbus Register Decoder
Paste raw registers and see every way they can be read: 16-bit, 32-bit and float, in all four byte orders. Type the value your device shows and the decoder finds the right format for you.
Registers
ExampleSeparate with spaces, commas or new lines. Lines copied from Modbus Poll such as 3 = 17254 work too.
Find my value
Enter the reading your meter, drive or HMI shows. The decoder tries every register, data type, byte order and common scaling (÷10, ÷100, ÷1000), best match first.
32-bit values
Two registers read as one value. Pick the first register of the pair.
| Order | Float32 | Int32 | UInt32 | Bytes |
|---|
16-bit registers
| Address | Hex | UInt16 | Int16 | Bits 15 … 0 |
|---|
Runs entirely in your browser. Nothing you enter is sent to a server.
Byte orders explained
A 32-bit value is four bytes, A B C D, split across two 16-bit registers. Devices disagree on the order, which is why the same registers can mean 230.5 or nonsense.
- ABCD
- Big-endian. High word first, as the Modbus spec intends. Try this first.
- CDAB
- Word swap. Low word first. Very common on energy meters and PLCs.
- BADC
- Byte swap. Bytes swapped inside each register. Rare.
- DCBA
- Little-endian. Everything reversed.
How to read the results
Modbus only carries 16-bit registers. What they mean — a signed number, a 32-bit float, a value in tenths — is decided by the device manufacturer, not by the protocol. The decoder lays every common reading side by side so you can compare it with the display or the register map.
- 16-bit registers show each register as an unsigned number (0 to 65535), a signed number (−32768 to 32767) and as single bits. Status and alarm words are read bit by bit.
- 32-bit values join two neighbouring registers into one Float32, Int32 or UInt32 in all four byte orders. Pick the first register of the pair above the table.
- Find my value takes the reading from the display and tries every register, type, byte order and a scaling of ÷10, ÷100 or ÷1000. Matches within 0.5 % are listed, closest first. Click a 32-bit match to highlight it in the table.
Common mistakes
- Address off by one. A manual that says “register 40001” usually means address 0 in the request. If every value looks shifted, read one register earlier or later.
- Swapped words. A voltage of 1.2e-38 or 2.6e+9 instead of 230 V nearly always means the two registers are in the wrong order. Try CDAB.
- Holding or input registers. 4xxxx registers are read with function 03, 3xxxx registers with function 04. The same number can hold different data in each table.
- Hidden scaling. 2305 instead of 230.5 is a value sent in tenths. Register maps list this as a multiplier (0.1) or as a number of decimals.
- Signed values read as unsigned. Power exported to the grid or a temperature below zero shows up as a number close to 65535 when read as UInt16.
Questions from practice
Why do I get a huge number or NaN instead of my float?
The two registers are almost certainly combined in the wrong order. A Float32 keeps its sign and exponent in the first bytes; when the low word comes first, fraction bits land in the exponent and you get values like 4.6e-41 or 2.6e+9. Compare the four rows in the 32-bit table: the row that matches your display is the byte order your software needs.
My manual says 40001 but my software wants 0. Which is right?
Both point to the same register. 40001 is a register number in the classic Modicon notation: the leading 4 marks a holding register and counting starts at 1. The request on the wire carries a zero-based address, so 40001 becomes 0 and 40002 becomes 1. Most software asks for the zero-based address. Enter 40001 as First address here to keep the labels in line with your manual.
Which byte order do energy meters and solar inverters use?
There is no single rule. The Modbus specification only defines 16-bit registers, so each manufacturer chooses how to pack 32-bit values. Many devices send the high word first (ABCD), while a large share of meters and PLCs send the low word first (CDAB). The register map should say so. If it does not, read a value you know, such as mains voltage or frequency, and use Find my value.
How do I paste values from Modbus Poll or a log?
Paste the lines as they are. The decoder takes the value after an equals sign or colon, so 0 = 17254 and 1 = 32768 become two registers. Choose Decimal if your values are decimal; if the input cannot be hex (for example five-digit numbers), the decoder switches to Decimal by itself.
Is my data sent anywhere?
No. The decoding runs in your browser as part of this page. Nothing you paste is uploaded to or stored on a server.