Hex to Text — Online Hex to Text Converter

🔒 Runs in your browser — nothing is sent to a server

Hex to text converter that turns any hexadecimal byte stream back into the original text in a single click. Paste hex in any common shape — space-separated `48 69`, compact `4869`, C-style `\x48\x69`, or prefixed `0x48, 0x49` — and this hex decoder strips the separators, parses each two-digit group into a byte, and rebuilds the original string. Pick UTF-8 (default — handles diacritics, CJK, Arabic and emoji) or strict 7-bit ASCII. Everything runs 100% inside your browser; your input never leaves your device, nothing is uploaded, logged or sent to any server.

Auto-detected — paste any of:

  • 48 69 (space-separated)
  • 4869 (compact, no separator)
  • \x48\x69 (C-style escapes)
  • 0x48, 0x49 (prefixed with comma)

Case-insensitive: `4869`, `4869` and `4869` all decode the same.

UTF-8 multi-byte sequences (diacritics, CJK, emoji) are combined automatically.

Two-pane view: input and output side by side
Copied!

When to use a hex to text converter

A hex to text converter is the right tool any time a stream of hexadecimal bytes turns up where a human needs a readable payload: reading out a serial dump from a microcontroller, decoding a CTF puzzle printed as hex, sanity-checking the output of a custom encoder, dropping a `\x..\x..` literal from C source back into ASCII for review, or recovering the text content of a binary protocol frame. Because the decode runs fully in the browser, the stream never touches a server — which matters when the payload is a leaked token or a proprietary protocol field.

How hex translates back into text

Hex-to-text decoding is a three-step pipeline. First the input is normalised: `0x` and `\x` markers are stripped, separators (spaces, commas, semicolons, pipes) are removed, and casing is folded to lowercase. Second the cleaned hex string is parsed in groups of two digits, each producing one byte (0–255); odd lengths and any non-hex character are reported as a clear error. Third the byte sequence is fed into a character decoder: `TextDecoder("utf-8", {fatal: true})` for UTF-8, which combines multi-byte sequences (2 bytes for Greek/Cyrillic, 3 for CJK, 4 for emoji) back into Unicode code points, or a straight ASCII lookup that rejects any byte ≥`80`. Both paths run natively in the browser, so the hex translator never sends your input anywhere.

Examples

Input
48 65 6c 6c 6f
Output
Hello
Hex to text — classic "Hello" with space separator
Input
68657820746f2074657874
Output
hex to text
Hexadecimal to text — compact hex stream without separators
Input
\x66\x72\x65\x65\x2d\x63\x6f\x6e\x76\x65\x72\x74\x65\x72
Output
free-converter
Convert hex to text — C-style escapes from a source file
Input
0x48, 0x65, 0x6c, 0x6c, 0x6f
Output
Hello
Hex to ASCII — 0x-prefixed array initialiser
Input
ce 93 ce b5 ce b9 ce b1
Output
Γεια
Hex decoder — UTF-8 Greek with diacritics

FAQ

How do I convert hex to text?

Paste the hex into the input above — the decoder accepts any common format: space-separated `48 69`, compact `4869`, C-style `\x48\x69`, or prefixed `0x48, 0x49`. Pick the encoding (UTF-8 by default, ASCII for strict 7-bit) and click Convert. The hex decoder strips the separators, parses each two-digit pair into a byte and rebuilds the text via the browser `TextDecoder` API.

What does a hex byte like 48 translate to?

`48` is decimal 72, the ASCII / UTF-8 byte for uppercase "H". Every two hex digits decode into exactly one byte; for ASCII text that byte is the character, and for UTF-8 multi-byte characters two, three or four consecutive bytes combine into one Unicode code point — the decoder handles this transparently.

Is hex to text the same as hex to string?

Yes — `hex to text` and `hex to string` are interchangeable names for the same operation. Some libraries and tutorials call it `unhexlify` (Python `binascii.unhexlify`), others `Buffer.from(hex, "hex").toString()` (Node), others a `parseHex` helper. Whatever the name, the underlying flow is identical: parse pairs of hex digits into bytes, then run those bytes through `TextDecoder`.

What hex input formats does this tool accept?

All of the common ones, auto-detected: space-separated (`48 69 6c 6c 6f`), compact (`48696c6c6f`), C-style escapes (`\x48\x69\x6c\x6c\x6f`), and 0x-prefixed (`0x48, 0x69, 0x6c, 0x6c, 0x6f`). The tool strips spaces, commas, semicolons, pipes, `0x` and `\x` markers, and then decodes whatever hex digits remain. Casing is irrelevant — `4869`, `4869` and `4869` decode identically.

Why does my hex fail to decode?

Two common causes. First, an odd number of hex digits — every byte needs exactly two, so `48 65 6` raises an "odd number of digits" error. Second, a non-hex character after stripping separators (any letter beyond a–f) raises an "invalid hex character" error pointing at the offender. Fix the offending pair and re-run.

Why does Greek text take 8 bytes when it has 4 letters?

UTF-8 is variable-width. Greek, Cyrillic, Hebrew and Arabic letters are 2 bytes each; most CJK characters are 3 bytes; emoji are usually 4 bytes. The hex `ce 93 ce b5 ce b9 ce b1` is 8 bytes that combine into the 4-letter Greek word `Γεια` (`hello`). UTF-8 preserves every Unicode character losslessly, at the cost of this width variation.

What is the difference between ASCII and UTF-8 in a hex decoder?

ASCII is 7-bit and covers code points 0–127 — English letters, digits, punctuation, control codes. UTF-8 is a variable-width superset: the same 128 bytes mean the same thing, but additional bytes ≥`80` form multi-byte sequences for everything else. ASCII mode fails fast on any byte ≥`80`; UTF-8 mode parses those bytes as parts of a wider character.

Is it safe to paste sensitive hex into this converter?

Yes — the hex to text converter runs entirely in your browser using the Web `TextDecoder` API. The hex input and the decoded text stay on your machine; nothing is uploaded, logged or cached. Safe for protocol frames captured from a debugger, hex dumps from a binary file and snippets pulled from a CTF challenge.

Glossary

Hexadecimal

Hexadecimal (base 16) writes each byte as two characters using digits 0–9 and letters a–f. A byte covers the value range 0–255, which fits in exactly two hex digits (`00`–`ff`). Hex is the standard human-readable view of binary data because it is twice as compact as binary, exactly aligned to byte boundaries and lossless for any payload.

Hex decoder

A hex decoder is any tool or function that converts a hex byte string back into text or binary. It strips the separators, parses each two-digit group as a byte (0–255), and runs the resulting byte sequence through a character decoder such as `TextDecoder` for UTF-8 or a simple ASCII table lookup. This page is a hex decoder that runs fully client-side in your browser.

Hex format conventions

The same byte stream can arrive as space-separated `48 69`, compact `4869`, C-style `\x48\x69` or prefixed `0x48, 0x69`. None is more "correct" than another — they are interchangeable representations chosen by the producer. A robust hex decoder normalises the input by stripping `0x`, `\x`, spaces, commas, semicolons and pipes before parsing, which is why this page accepts all four forms transparently.

ASCII

ASCII is the 7-bit character set (ANSI X3.4) that covers the 128 characters most commonly used in English. Every ASCII character fits in a single byte with a leading zero, so a hex to ASCII path only has to handle pairs where the leading bit is 0 — `00` to `7f`. Anything ≥`80` is outside ASCII and belongs in UTF-8.

UTF-8

UTF-8 is the dominant character encoding of the web — a variable-width superset of ASCII where 1 byte covers 0–127, 2 bytes cover Latin / Greek / Cyrillic / Hebrew / Arabic, 3 bytes cover the Basic Multilingual Plane (most CJK glyphs), and 4 bytes cover emoji and rare scripts. A UTF-8 hex decoder combines multi-byte sequences back into Unicode code points automatically.

Related tools