Hex String to Text Converter
Decode a hex string — like Python's bytes.fromhex() input or a hex literal from your code — back into readable text.

Built by
Swapnil SanghviFull-Stack Web Developer & WordPress Developer
Swapnil Sanghvi is a full-stack web and WordPress developer, UI designer, and full-time freelancer who builds and maintains Hex Calculator.
Further reading: Character encoding — Wikipedia
How to Decode a Hex String to Text
Strip any 0x prefix or spacing, split the remaining digits into byte pairs, and decode those bytes as UTF-8 — the same format Python's bytes.fromhex() and similar functions in other languages expect as input.
Where Decoding a Hex String Actually Comes Up
Reading a Hex-Encoded Database Column
Binary data stored as a hex string in a database is unreadable at a glance — decoding it here lets you spot-check a row's content without writing a query-side conversion.
column value -> readable text
Debugging bytes.fromhex() Output
When code that builds or parses a hex string produces an unexpected result, decoding the exact string here confirms whether the bug is in the encoding step or somewhere else.
48656c6c6f -> Hello
Checking a Hash or Token's Encoded Payload
Some tokens and encoded identifiers carry a hex-encoded string inside them — decoding it here is a quick way to see what data is actually embedded before writing code to parse it.
hex payload -> plain text
Common Mistakes When Decoding a Hex String
- Leaving in a 0x prefix that some tools expect stripped and others don't — this converter handles both.
- Copying a truncated hex string that's missing trailing bytes.
- Assuming the source used a different encoding, like EBCDIC, without checking.
Why Use This Instead of Writing a Script
- Accepts hex with or without 0x prefixes and spacing, no cleanup needed first
- Runs entirely in your browser — nothing you type gets sent anywhere
- Decodes as UTF-8, so it handles more than just plain ASCII text
- Faster than firing up a REPL just to run bytes.fromhex() once
Limitations
- Text is encoded as UTF-8 bytes before converting to hex, so multi-byte characters (accents, emoji, non-Latin scripts) take up more than 2 hex digits each.
Frequently Asked Questions
What counts as a "hex string" here?
Any string of hex digit pairs representing bytes — the same format you'd pass to Python's bytes.fromhex(), or get back from calling .hex() on a bytes object in most languages.
Does it matter if my hex string has a 0x prefix?
No — with or without a 0x prefix, and with or without spaces between byte pairs, this converter normalizes the input before decoding.
What encoding does it assume for the decoded bytes?
UTF-8, which covers plain English exactly like ASCII and also correctly handles the full range of Unicode text if your original string included it.
Where does a 'hex string' typically come from in code?
Serializing bytes for logging, hashing output (like a hex digest), or a database field storing binary data as a hex-encoded string column.
What if the hex string has an odd number of characters?
It gets padded with a leading zero to complete the last byte — though a genuinely malformed hex string is usually a sign a digit got dropped somewhere upstream.
Is this different from Hex to Text?
Same underlying conversion — this page is framed around the 'hex string' terminology programmers use when working with bytes.fromhex()-style values specifically.
I copied a hex string from my code — will it decode here as-is?
In most cases yes — pasting a Python bytes.fromhex() argument, a .hex() output, or a hex literal from a log directly into this tool works without any manual cleanup first.
Can I decode a hex-encoded database column with this?
Yes — if a database stores binary data as a hex string column, pasting the raw value here decodes it back to readable text, useful for spot-checking data without writing a query-side conversion.