FormatterHQ

ASCII to Text

Turn a list of character codes back into text. Decimal, hex, octal, binary and HTML &#NNN; references are all understood.

Loading tool…
Ready.

How to use the ASCII to Text

  1. Type or paste into the ASCII codes box, or click Sample. You can also drop a text file on either box, or load one into the ASCII codes box with its Open file button.
  2. The Text box updates live as you type. It works both ways — edit the Text side to convert back, or click ⇄ Swap to exchange the sides.
  3. Adjust Code format in the options bar above the editors; the result refreshes immediately. Separator only affects the reverse direction, when you type in the Text box.
  4. Use Copy or Download on either box to take the result, or Clear to start again.

ASCII to text: decode character codes

The ASCII to text converter reads a list of numeric character codes and returns the text they spell. Codes can come from programming exercises, String.fromCharCode calls, database dumps, spreadsheets or puzzles.

Example

Input:

72 101 108 108 111 32 65 83 67 73 73 33

Output:

Hello ASCII!

The numbers 65 to 90 are the uppercase letters and 97 to 122 the lowercase ones, so a list mostly in those ranges is almost certainly ordinary text.

Flexible input

  • Separate codes with spaces, commas, semicolons or line breaks. Brackets and braces are ignored, so array literals paste straight in.
  • Choose the notation with the Code format option, which applies in both directions. Individual values can override it with a prefix: 0x48 is always hex and 0b1001000 always binary.
  • HTML numeric references such as Hi or H are recognised automatically.
  • Codes above 127 are treated as Unicode code points, up to U+10FFFF, so values such as 233 (é), 8364 (€) or 128512 (😀) work too.

Examples in other notations

NotationInputOutput
Hex0x48 0x69Hi
Octal110 151Hi
Binary1001000 1101001Hi
HTMLHiHi

Troubleshooting

  • “… is not a valid base-10 number”. The input contains letters — probably hex codes. Switch the notation to Hex.
  • Unexpected symbols. Octal and decimal look alike; “110” is “n” in decimal but “H” in octal. Check which notation your source uses.
  • UTF-8 bytes instead of code points. If the numbers came from a byte array (for example 195 169 for “é”), decode them with Byte to String instead; here they would become “é”.

The same in code and spreadsheets

JavaScript: String.fromCodePoint(72, 105). Python: ''.join(map(chr, [72, 105])). Java: (char) 72 for a single character. Excel and Google Sheets: =CHAR(72) for codes up to 255 and =UNICHAR(8364) for any Unicode character. This tool is quicker when you have a whole list of codes to decode at once.

Common sources of code lists include programming exercises, CTF puzzles, obfuscated scripts that build strings from numbers, and data exported from systems that store characters as integers.

Go the other way with Text to ASCII Codes. The decoder runs in your browser.

Control codes you may meet

Codes 0 to 31 and 127 are control characters rather than letters. Most of them have no visible shape, so when a decoded result seems to have odd gaps, stray line breaks or “missing” characters, look for these values in your list:

CodeHexMeaning
00x00NUL, often a string terminator or padding
90x09Horizontal tab
100x0ALine feed, the Unix line break
130x0DCarriage return, paired with 10 on Windows
270x1BEscape, the start of terminal colour codes
1270x7FDelete

Code 32 is the ordinary space. A list that ends in 13 10 simply finishes with a Windows line break.

ASCII to text in Python

In Python, chr() turns one character code into a character, so converting a list is a join over the split input; pass a base to int() for hex, octal or binary codes. The mistake to avoid is feeding UTF-8 byte values to chr(). It works on Unicode code points, so the bytes 195 169 come out as é; build a bytes object and call decode("utf-8") to get é.

codes = "72 101 108 108 111 32 65 83 67 73 73 33"

text = "".join(chr(int(code)) for code in codes.split())
print(text)

# hex codes: pass the base to int()
hex_codes = "48 65 6c 6c 6f"
print("".join(chr(int(code, 16)) for code in hex_codes.split()))

# chr() takes code points, so UTF-8 byte values need bytes().decode()
print("".join(chr(n) for n in [195, 169]))
print(bytes([195, 169]).decode("utf-8"))

The converter above gives the same results for these inputs; for byte values, use Byte to String.

Frequently asked questions

How do I convert ASCII numbers to letters?
Paste the numbers, separated by spaces or commas, into the ASCII codes box. Each number becomes the character with that code, for example 65 becomes A.
Can I mix hex and decimal values?
Yes. Values with a 0x prefix are always read as hex and 0b values as binary; the rest follow the selected notation.
Does it support codes above 127?
Yes. Numbers above 127 are treated as Unicode code points, so you can decode accented letters, symbols and emoji.
Why do I get é instead of é?
The numbers are UTF-8 bytes, not code points. Use Byte to String to decode byte values.

Last updated October 3, 2026

Related tools