What decoding hexadecimal is for
Hexadecimal is the language technical tools use to show you raw bytes. When you open a memory dump, inspect a packet from a network protocol in Wireshark, run strings or a hex editor over a binary, or examine evidence in digital forensics, what you see are digit pairs like 48 65 6c 6c 6f. This converter translates them back into readable text instantly, and it is a staple of CTF challenges, where flags often hide encoded in hex. It also earns its keep in everyday debugging: checking exactly which bytes your API sends, understanding why an accent got mangled along the way, or reading a payload that was logged in hex. It accepts the hex exactly as you copied it — with spaces, line breaks, 0x or \\x prefixes, uppercase or lowercase — and decodes real UTF-8, not just ASCII.
How it works: from hex pair to character
One hex digit represents 4 bits, so a pair of digits represents exactly one byte: from 00 (0) to FF (255). Decoding means grouping the digits in pairs, converting each pair to its number, and asking TextDecoder to interpret those bytes as UTF-8. That is why an odd number of digits is always an error: a byte was left half-written. In the opposite direction, TextEncoder turns your text into UTF-8 bytes and each byte is written with its 2 hex digits.
Accents and emoji: multibyte UTF-8 in hex
The first 128 characters (ASCII) take one byte each, but everything else uses several. The ñ is 2 bytes (C3 B1), the € sign is 3 (E2 82 AC) and an emoji like 🙂 is 4 (F0 9F 99 82). If you have ever seen "ñ" where "ñ" should be, this was exactly the culprit: someone decoded those 2 bytes with the wrong table. Since this tool uses the browser's native APIs, multibyte characters travel intact in both directions.
Complementary tools
If what you need is to see text as bits instead of hex, use the text to binary converter, which shows each byte as its 8 zeros and ones. And if you want to convert standalone numbers between base 2, 8, 10, 16 or any other — without going through text — that is what the number base converter does.
Reference table: characters and their hex
Printable ASCII characters run from 32 (space) to 126 (~). Here is the cheat sheet with the most looked-up ones:
| Character | Decimal | Hex | Binary |
|---|---|---|---|
| (space) | 32 | 20 | 00100000 |
| ! | 33 | 21 | 00100001 |
| # | 35 | 23 | 00100011 |
| $ | 36 | 24 | 00100100 |
| % | 37 | 25 | 00100101 |
| & | 38 | 26 | 00100110 |
| * | 42 | 2A | 00101010 |
| + | 43 | 2B | 00101011 |
| - | 45 | 2D | 00101101 |
| . | 46 | 2E | 00101110 |
| / | 47 | 2F | 00101111 |
| 0 | 48 | 30 | 00110000 |
| 9 | 57 | 39 | 00111001 |
| = | 61 | 3D | 00111101 |
| ? | 63 | 3F | 00111111 |
| @ | 64 | 40 | 01000000 |
| A | 65 | 41 | 01000001 |
| F | 70 | 46 | 01000110 |
| Z | 90 | 5A | 01011010 |
| a | 97 | 61 | 01100001 |
| f | 102 | 66 | 01100110 |
| z | 122 | 7A | 01111010 |
| ñ (UTF-8, 2 bytes) | 195 177 | C3 B1 | 11000011 10110001 |
| 🙂 (UTF-8, 4 bytes) | 240 159 153 130 | F0 9F 99 82 | 11110000 10011111 10011001 10000010 |
The last two rows show why "one character = one byte" only holds for ASCII: in UTF-8, ñ and emoji are encoded as sequences of 2 to 4 bytes, and each of those bytes shows up as one more hex pair in the output.