Skip to content

Convert decimal codes to text

Turn a list of decimal character codes into text and back, with UTF-8 or ASCII byte handling and any separator you like.

  • Runs in your browser
  • Nothing you enter is sent
  • Free, no account
Decimal → Text
Conversion runs as you type. Use Swap to send the result back into the input and reverse the direction.

The converted value appears here.

Options

Accents, CJK and emoji become multiple bytes each, exactly as they are stored on disk.

Applies to the generated output. Input is parsed with or without separators.

Load a text file
Drop a .txt containing decimal values and they are parsed straight away.
Drop a file hereRead locally with the File API — nothing is uploaded.Any file · up to 64 MB each

Decimal character codes

Some systems hand you a list of plain numbers instead of hex: 72 101 108 108 111. Each is one byte, 0–255, and this page turns them back into text in either direction.

RangeContentsAnchors worth remembering
0–31Control codes9 tab, 10 line feed, 13 carriage return
32SpaceThe first printable code
48–57Digits48 is 0, so 53 is 5
65–90A–Z65 is A
97–122a–z97 is a, exactly 32 above A
128–255ExtendedMeaning depends entirely on the encoding

Separators are not optional

Unlike hex, decimal byte values have no fixed width — 7, 72 and 255 are one, two and three digits. So 72101108 is genuinely ambiguous. Use spaces, commas, semicolons or newlines; all are accepted. The one exception is input where every value has been padded to three digits, which the parser can split reliably.

Codes above 255

If your list contains numbers like 8364 or 128512, they are not bytes — they are Unicode codepoints. 8364 is U+20AC, the euro sign; 128512 is U+1F600, the grinning face. This page works on bytes, so those values are rejected rather than truncated. Convert codepoints to UTF-8 bytes first, or use the hex tools, which show the multi-byte sequences directly.

Where these lists come from

  • Spreadsheets — a column produced by CODE() or UNICODE().
  • Databases — ASCII() output while hunting an encoding problem.
  • Teaching material — introductory exercises almost always use decimal.
  • Microcontroller serial output — Serial.println(byte) prints decimal by default, which is why Arduino logs look like this.
  • Puzzles and CTFs — a comma-separated list of numbers is the most common first-stage encoding there is.

Why 65 for A, and why the 32 gap

ASCII was designed so that operations were cheap in hardware. Capital A is 1000001 in binary and lowercase a is 1100001 — a single bit apart. Case conversion was therefore one bitwise operation, and 32 is simply the decimal value of that bit. The same thinking put the digits at 48–57, so the numeric value of a digit character is its code minus 48.

Going the other way

Use the swap button to turn text into a list of decimal codes. In UTF-8 mode a single accented character produces two numbers and an emoji produces four, which is worth seeing at least once — it explains a great many “why is my string longer than I typed” bugs.

Questions

Are these character codes or byte values?

Byte values. In ASCII mode they are identical to character codes. In UTF-8 mode a single character can be two, three or four separate byte values, all shown in the list.

Do I need separators?

For decimal, yes — 72101108 could be read a dozen ways. Space, comma, semicolon and newline all work. If you pad every value to three digits you can also run them together.

What is the highest valid number?

255. Each value here is one byte. If your source has numbers above 255 they are Unicode codepoints rather than bytes — the character counter and hex pages handle those better.

Why is capital A 65 and lowercase a 97?

ASCII was laid out so the case bit is a single bit: 65 is 1000001 and 97 is 1100001. Flipping bit 6 changes case, which made early terminal hardware much simpler.