About Hex to Text
Hex to text reads a sequence of hexadecimal bytes and reconstructs the characters they encode under UTF-8. It is the counterpart to Text to Hex, and it is what you use when a byte sequence has been handed to you in hex form and you need to know what it actually contains.
Hex appears in that form for good reason. It is how log lines print request bodies that may contain non-printable bytes, how error messages quote a malformed header, and how packet captures present payloads. In each case the hex is unambiguous in a way a directly-rendered string would not be.
Reading the result takes a little care with multi-byte characters. Three hex pairs in a row that begin with E4 through E9 are a Chinese or Japanese character, and four pairs beginning F0 indicate an emoji. That structure is often enough to tell whether the data is UTF-8 or was written by something using a different encoding.
Where the input does not form valid UTF-8, the offending bytes are simply left out of the result rather than being replaced with a visible substitute or flagged in an error list. A byte whose value falls outside the range an eight-bit character can carry is dropped on the same basis. That behaviour is worth knowing because the output can therefore be shorter than the input implies with no warning attached to it, and there is no indication of how many bytes were skipped or which ones. If a value refuses to decode, check that the byte count is even and that the high bytes appear in a legal sequence before assuming the input was wrong.
How to use Hex to Text
- 1 Paste the hexadecimal bytes, with or without spaces between them.
- 2 Read the characters the bytes decode to, shown below the input as you type.
- 3 Check the byte count against the number of characters you expect — a mismatch points to a multi-byte encoding.
Frequently asked questions
My hex has no spaces. Will it still work?
Yes, though hex without separators relies on the digits pairing up correctly from the start. If an odd number of digits was pasted, or a leading digit was lost, every subsequent byte is misread and the output is garbage.
Why does the output contain replacement characters?
A replacement character means a byte sequence that is not valid UTF-8 — most often bytes in the 80–BF range appearing without their leading byte, which happens when a multi-byte character was truncated. The original encoding may not have been UTF-8 at all.
Can this decode hex from a file signature or checksum?
It will decode the bytes, but a checksum has no readable meaning — it is a derived value, not text. File signatures are more useful: the first bytes tell you the type, and decoding them shows the identifier as characters.
Does it matter whether the hex uses uppercase or lowercase?
No. 4E and 4e are the same value and both are read correctly, so you can paste hex from any source without normalising it first.
Free, online, and private
Free to use
Hex to Text is completely free. There is no account to create, no login, and no hidden charge or usage limit.
Runs online in your browser
It is a free online tool that runs entirely in your browser. Nothing to download or install — open the page and start using it right away.
Your data stays private
All processing happens locally on your device. Your input is never uploaded, stored, or tracked, so it never leaves your browser.
How Hex to Text behaves in detail
These are the specifics of this implementation — the exact ranges, defaults and fixed settings you are working with.
| Parameter | Value |
|---|---|
| Token pattern | greedy runs of hex digits (0-9, a-f, A-F) |
| Value ceiling | 255 — larger tokens are dropped rather than truncated or wrapped |
| Digit grouping | not required: d and 0d both produce the single byte 13 |
| Byte decoding | TextDecoder as UTF-8; invalid sequences give replacement characters |
| Prefix handling | 0x does not have to be stripped — parseInt accepts it at radix 16 |
Compiled from the implementation of this tool and checked against it by itoolnet.
What Hex to Text does not do
Knowing the edges of a tool saves more time than another list of its features. These are the cases where it will not do what you might expect.
- The tokenizer takes each run of hex digits whole, so a string without separators is read as one enormous number: 48656c6c6f is a ten-digit token far above the 255 ceiling and the result is empty text.
- Reading depends on the byte stream being valid UTF-8. Hex taken from a Latin-1 or GBK source decodes into replacement characters, and the originals are not recoverable from what is displayed.
- Tokens are not checked for length, so an odd-length token like 4 is accepted as the byte 04 — a control character. A hex string that lost a digit somewhere still produces output, just not the text that was meant to be there.
Tested and documented by itoolnet, the team that builds and maintains this site.