Free · no sign-up · nothing leaves your browser
Hex ⇄ ASCII Converter
Paste a hex dump or plain text — the direction is detected automatically. Convert between hex and ASCII / UTF-8 / Latin-1 instantly, with odd lengths, stray characters and invalid UTF-8 sequences highlighted in place.
Convert hex and text
100% local · no uploadHow it works
Three steps, all of them in your browser.
Drop a hex dump (48 65 6C) or plain text into the box. Separators, 0x and \x prefixes are all accepted.
If the cleaned input is hex digits it is decoded; otherwise it is encoded to bytes. The ⇄ bar shows which way it went.
Both directions are shown at once — decoded text and formatted hex bytes — with byte and character counts.
Built for protocol and log work
Odd digit counts, non-hex characters and broken UTF-8 sequences are listed with their byte offset and shown in red inside the hex output.
Decode as UTF-8, ASCII or Latin-1 (ISO-8859-1). Latin-1 is decoded byte-for-byte so 0x80–0xFF round-trip exactly.
Space, compact, comma, 0x and \x output — lowercase, normalized, ready to paste into source.
The eight squares above the input light up as bytes are read, so you can see the stream advancing while you type.
Zero network requests, no accounts, no storage. The data never leaves the tab — safe for proprietary payloads.
Inputs up to 200,000 characters are handled instantly, with a clear notice if a paste is truncated.
FAQ
How does it decide the direction?
After removing separators and 0x/\x prefixes, if every remaining character is a hex digit the input is treated as hex and decoded to text. Otherwise it is treated as text and encoded to bytes. Hex-looking text such as Cafe is ambiguous — the direction bar always tells you which way it resolved.
Why is a byte shown in red?
A red byte is part of an invalid sequence: it failed UTF-8 decoding, is above 0x7F when ASCII was selected, or is a stray character in a hex dump. The issue panel lists each one with its decimal and hex offset.
What is the difference between UTF-8 and Latin-1?
UTF-8 uses one to four bytes per character; Latin-1 maps each byte 0x00–0xFF to a single character. A byte above 0x7F is therefore valid Latin-1 but usually invalid on its own in UTF-8 — which is exactly why mojibake happens.
Is my data sent anywhere?
No. The whole converter is plain JavaScript on this page; there is no server endpoint involved and no analytics on the input.
Latest updates
More free tools
Step-by-step guides in our blog & guides.