A plain ASCII value
Input
4869
Result
Hi
Two byte pairs, two characters. Values entirely in the 20 to 7e range are almost always readable text.
Convert hex-encoded text back into plain text directly in the browser.
Start here Paste the hex string; spaces and line breaks between the pairs are ignored.
Encode this developer note.
Understand the format
Decoding hexadecimal reassembles pairs of digits into bytes and reads them as UTF-8 text, which tells you whether a hex blob was ever text in the first place.
Each pair of hexadecimal digits becomes one byte, and the resulting byte sequence is decoded as UTF-8. Because two digits are consumed at a time, alignment is everything: drop a single digit anywhere in the string and every byte after that point is wrong, which typically produces a run of replacement characters rather than a clean failure.
This decoder ignores whitespace, so hex copied from a debugger or a packet dump in space-separated or line-wrapped form works without cleanup. It does require an even number of digits and rejects anything outside 0-9 and a-f, which catches truncated copies early.
Hex is used to print bytes of any kind. A digest, an encrypted payload, a compressed stream, or a binary protocol frame all decode into byte sequences that are not valid text, and the output will contain replacement characters. That result is still informative: it rules out the assumption that the value was a string.
A useful signal is the byte range. Sequences made mostly of 20 to 7e are printable ASCII and very likely text. Sequences with many bytes above 7f that do not follow UTF-8 continuation rules are binary data or a different encoding.
Step by step
Decoding runs in the browser with TextDecoder. Protocol captures and stored values pasted here are never transmitted.
Worked examples
Input
4869
Result
Hi
Two byte pairs, two characters. Values entirely in the 20 to 7e range are almost always readable text.
Input
e282ac
Result
€
Three bytes, one character. Splitting this sequence would produce replacement characters rather than a partial symbol.
Reference
| Observation | Likely meaning | Next step |
|---|---|---|
| Odd number of digits | Truncated or mis-copied value | Re-copy the complete string. |
| Contains g-z or punctuation | Not hexadecimal, or a separator was included | Remove 0x prefixes, colons, and commas. |
| Exactly 32 or 64 digits | An MD5 or SHA-256 digest | Digests are not text; compare them rather than decoding. |
| Mostly 20 to 7e | Printable ASCII | Decodes cleanly to readable text. |
| Starts 1f 8b | A gzip stream | Decompress before attempting to read it. |
Practical Guide
Troubleshooting
FAQ
Every byte needs exactly two digits. An odd count means at least one digit was lost when the value was copied.
Unicode replacement characters, inserted where the bytes are not valid UTF-8. They indicate binary data or a different character encoding.
No. Uppercase and lowercase hexadecimal digits are equivalent, and both are accepted.
Not here; this panel produces text. Use xxd -r -p or an equivalent utility to rebuild binary files.
Yes. RFC 4648 defines Base16, which is hexadecimal with uppercase digits. The bytes are identical either way.
Go deeper