Hex strings appear in log files, packet captures, database dumps, QR payloads, URL encoding and CTF puzzles. Reading them means pairing up the digits into bytes, turning each pair into a number and decoding the byte sequence with the right character set – exactly what this tool does in one step.
The decoder is forgiving about formatting: “48656C6C6F”, “48 65 6C 6C 6F”, “0x48,0x65” and “x48x65” all work. Each pair becomes one byte, and the byte sequence is decoded as UTF-8 by default. If the text came from an older Windows program, try Windows-1252; if every second byte is 00, it is almost certainly UTF-16 (choose LE when the zeros come second).
Bytes below 20 (hex) are control codes such as line feed (0A), carriage return (0D) or form feed (0C). They do not produce visible letters, so the tool shows them as small symbols and mentions them in the note.
How to use the Hex to Text Converter
- Direction
- Hex code
- Character encoding
- Separator between bytes
- Custom separator
Everything is calculated in your browser, so results appear instantly and nothing you type is sent to a server.
How it works
Prefixes and separators are removed, the remaining digits are read in pairs, and each pair is converted from base 16 to a byte. The byte list is decoded with the chosen encoding; invalid sequences are shown as � and counted in the note.
Worked example
Decode 48 65 6C 6C 6F 2C 20 77 6F 72 6C 64. 48 = 4 × 16 + 8 = 72 = H, 65 = 101 = e, 6C = 108 = l (twice), 6F = 111 = o, 2C = 44 = comma, 20 = 32 = space, 77 = 119 = w, 6F = o, 72 = 114 = r, 6C = l, 64 = 100 = d. The message is Hello, world – 12 bytes, 12 characters.
Common byte values
| Hex | Decimal | Character |
|---|---|---|
| 09 | 9 | Tab |
| 0A | 10 | Line feed (new line) |
| 0D | 13 | Carriage return |
| 20 | 32 | Space |
| 30–39 | 48–57 | Digits 0–9 |
| 41–5A | 65–90 | A–Z |
| 61–7A | 97–122 | a–z |
Formula
Byte = 16 × first hex digit + second hex digit (A = 10 … F = 15)
Bytes → characters with the chosen encoding
Worked example
Inputs — Direction: Hex → text; Hex code: 48 65 6C 6C 6F 2C 20 77 6F 72 6C 64; Character encoding: UTF-8 (Unicode – recommended); Separator between bytes: Space.
Results — Result = Hello, world; Same bytes in binary = 01001000 01100101 01101100 01101100 01101111 00101100 00100000 01110111 01101111 01110010 01101100 01100100; Bytes in decimal = 72 101 108 108 111 44 32 119 111 114 108 100; Number of bytes = 12; Number of bits = 96; Number of characters = 12.
Key terms
- Hex dump
- A listing of raw bytes as hexadecimal pairs.
- Mojibake
- Garbled text caused by decoding bytes with the wrong encoding.
- Control code
- A non-printing character such as line feed (0A) or tab (09).
- Prefix 0x
- A common marker meaning “the following digits are hexadecimal”.
Frequently asked questions
What does 48 69 mean?
“Hi”: 0x48 = 72 = “H” and 0x69 = 105 = “i”.
How do I convert hex to text manually?
Split into pairs, convert each pair to decimal (first digit × 16 + second digit) and look the number up in an ASCII table.
Can I paste hex without spaces?
Yes – a continuous string is cut into pairs; it must have an even number of digits.
Why are there 00 bytes between the letters?
The text is UTF-16. Choose UTF-16LE if the 00 follows each letter byte, or UTF-16BE if it comes first.
What is 0D 0A?
Carriage return + line feed, the Windows line ending.
What is FF + 1 in hex?
100 (hex), which is 256 in decimal – it no longer fits in one byte.
Why does the result show é instead of é?
That is UTF-8 read as Windows-1252 (mojibake). Switch the encoding to UTF-8.