ToolActToolAct

ASCII Table Query

Complete ASCII character code reference with control, printable, and extended characters

256 characters total
DecimalHexCharacterDescription
00x00-Null character
10x01-Start of Heading
20x02-Start of Text
30x03-End of Text
40x04-End of Transmission
50x05-Enquiry
60x06-Acknowledge
70x07-Bell
80x08-Backspace
90x09-Horizontal Tab
100x0A-Line Feed
110x0B-Vertical Tab
120x0C-Form Feed
130x0D-Carriage Return
140x0E-Shift Out
150x0F-Shift In
160x10-Data Link Escape
170x11-Device Control 1
180x12-Device Control 2
190x13-Device Control 3
200x14-Device Control 4
210x15-Negative Acknowledge
220x16-Synchronous Idle
230x17-End of Transmission Block
240x18-Cancel
250x19-End of Medium
260x1A-Substitute
270x1B-Escape
280x1C-File Separator
290x1D-Group Separator
300x1E-Record Separator
310x1F-Unit Separator
1270x7F-Delete
320x20Space
330x21!Exclamation mark
340x22"Double quote
350x23#Number sign
360x24$Dollar sign
370x25%Percent sign
380x26&Ampersand
390x27'Single quote
400x28(Left parenthesis
410x29)Right parenthesis
420x2A*Asterisk
430x2B+Plus sign
440x2C,Comma
450x2D-Hyphen
460x2E.Period
470x2F/Slash
480x300Digit 0
490x311Digit 1
500x322Digit 2
510x333Digit 3
520x344Digit 4
530x355Digit 5
540x366Digit 6
550x377Digit 7
560x388Digit 8
570x399Digit 9
580x3A:Colon
590x3B;Semicolon
600x3C<Less than
610x3D=Equal sign
620x3E>Greater than
630x3F?Question mark
640x40@At sign
650x41AUppercase A
660x42BUppercase B
670x43CUppercase C
680x44DUppercase D
690x45EUppercase E
700x46FUppercase F
710x47GUppercase G
720x48HUppercase H
730x49IUppercase I
740x4AJUppercase J
750x4BKUppercase K
760x4CLUppercase L
770x4DMUppercase M
780x4ENUppercase N
790x4FOUppercase O
800x50PUppercase P
810x51QUppercase Q
820x52RUppercase R
830x53SUppercase S
840x54TUppercase T
850x55UUppercase U
860x56VUppercase V
870x57WUppercase W
880x58XUppercase X
890x59YUppercase Y
900x5AZUppercase Z
910x5B[Left bracket
920x5C\Backslash
930x5D]Right bracket
940x5E^Caret
950x5F_Underscore
960x60`Grave accent
970x61aLowercase a
980x62bLowercase b
990x63cLowercase c
1000x64dLowercase d
1010x65eLowercase e
1020x66fLowercase f
1030x67gLowercase g
1040x68hLowercase h
1050x69iLowercase i
1060x6AjLowercase j
1070x6BkLowercase k
1080x6ClLowercase l
1090x6DmLowercase m
1100x6EnLowercase n
1110x6FoLowercase o
1120x70pLowercase p
1130x71qLowercase q
1140x72rLowercase r
1150x73sLowercase s
1160x74tLowercase t
1170x75uLowercase u
1180x76vLowercase v
1190x77wLowercase w
1200x78xLowercase x
1210x79yLowercase y
1220x7AzLowercase z
1230x7B{Left brace
1240x7C|Vertical bar
1250x7D}Right brace
1260x7E~Tilde
1280x80€
1290x81
1300x82‚
1310x83ƒ
1320x84„
1330x85…
1340x86†
1350x87‡
1360x88ˆ
1370x89‰
1380x8AŠ
1390x8B‹
1400x8CŒ
1410x8D
1420x8EŽ
1430x8F
1440x90
1450x91‘
1460x92’
1470x93“
1480x94”
1490x95•
1500x96–
1510x97—
1520x98˜
1530x99™
1540x9Aš
1550x9B›
1560x9Cœ
1570x9D
1580x9Ež
1590x9FŸ
1600xA0 
1610xA1¡
1620xA2¢
1630xA3£
1640xA4¤
1650xA5¥
1660xA6¦
1670xA7§
1680xA8¨
1690xA9©
1700xAAª
1710xAB«
1720xAC¬
1730xAD­
1740xAE®
1750xAF¯
1760xB0°
1770xB1±
1780xB2²
1790xB3³
1800xB4´
1810xB5µ
1820xB6
1830xB7·
1840xB8¸
1850xB9¹
1860xBAº
1870xBB»
1880xBC¼
1890xBD½
1900xBE¾
1910xBF¿
1920xC0À
1930xC1Á
1940xC2Â
1950xC3Ã
1960xC4Ä
1970xC5Å
1980xC6Æ
1990xC7Ç
2000xC8È
2010xC9É
2020xCAÊ
2030xCBË
2040xCCÌ
2050xCDÍ
2060xCEÎ
2070xCFÏ
2080xD0Ð
2090xD1Ñ
2100xD2Ò
2110xD3Ó
2120xD4Ô
2130xD5Õ
2140xD6Ö
2150xD7×
2160xD8Ø
2170xD9Ù
2180xDAÚ
2190xDBÛ
2200xDCÜ
2210xDDÝ
2220xDEÞ
2230xDFß
2240xE0à
2250xE1á
2260xE2â
2270xE3ã
2280xE4ä
2290xE5å
2300xE6æ
2310xE7ç
2320xE8è
2330xE9é
2340xEAê
2350xEBë
2360xECì
2370xEDí
2380xEEî
2390xEFï
2400xF0ð
2410xF1ñ
2420xF2ò
2430xF3ó
2440xF4ô
2450xF5õ
2460xF6ö
2470xF7÷
2480xF8ø
2490xF9ù
2500xFAú
2510xFBû
2520xFCü
2530xFDý
2540xFEþ
2550xFFÿ

What is ASCII?

ASCII (American Standard Code for Information Interchange) is a character encoding standard based on the Latin alphabet. Originally developed for telegraph communication in the 1960s, it became the foundation of character encoding in computing. Standard ASCII contains 128 characters (0-127), including 33 control characters and 95 printable characters. Extended ASCII (128-255) adds another 128 characters for symbols and international characters, though encoding varies by region. An ASCII table earns its place during encoding debugging, control-character checks, protocol work, escape-sequence lookup, terminal behavior analysis, and older file-format inspection. Decimal, hexadecimal, and binary values show how a character is actually stored or transmitted. Modern text usually uses Unicode, so ASCII represents only the historical 7-bit core. For international characters, emoji, typography marks, and mixed-language text, Unicode code points and encoding rules still need to be checked separately.

How to Use

Basic Operations

  1. Click any value or character to copy it
  2. Use the search box to quickly find specific characters
  3. Click category buttons to filter by character type
  4. Hover over characters to see detailed descriptions

Encoding Notes

  • ASCII only covers the 0-127 character range; accented letters, emoji, and most non-English text require Unicode encodings such as UTF-8.
  • Control characters may not display visibly, but they can still affect files, terminals, protocols, and copy-pasted text.

Use Cases

Find the exact code for a visible or invisible characterSearch by character, decimal value, hexadecimal value, or description to confirm entries such as space 32, LF 0x0A, CR 0x0D, ESC 0x1B, or capital A 65 while debugging text processing. The page is a reference tool with no input field that gets sent anywhere - searches run against the embedded 128-entry ASCII data, so internal code points, log fragments, and protocol constants can be looked up without uploading them.
Separate control characters from printable textUse the control, printable, and extended filters when a log, serial message, CSV file, or terminal output contains characters that do not appear on screen but still change parsing behavior. Because no character data is collected, the same filters can be used to teach trainees, build reference cards, or audit parser expectations without leaving an audit trail in any backend.
Copy reference values into code or documentationClick a table row value to copy it when writing parser tests, protocol notes, keyboard references, escape-sequence explanations, or legacy integration documentation. For extended 128-255 values, still confirm the target code page - the table lists the position but cannot know which code page the destination system actually decodes with.
Decode an escape sequence without consulting a manualPaste a sequence such as \x1B[31m, \r\n, or \t into the search box and read the decimal, hex, and binary values plus the printable rendering. Useful when log lines or terminal output show mojibake and you need to confirm whether the original byte was a control character or a code-page artifact. The lookup happens against the in-page table only, so terminal captures from production systems never leave the browser.
Build a printable character inventory for a parserFilter to printable characters and review the 95-entry ASCII range before defining an allowlist for a strict parser. This helps catch assumptions about whitespace, punctuation, and quote characters that often differ between programming languages, shells, terminal output, and CSV dialects. The inventory is the page's own static data set, so referencing it does not depend on network availability or external documentation.

Technical Principle

ASCII (American Standard Code for Information Interchange, ANSI X3.4-1968, ISO/IEC 646:1991 IRV) is a 7-bit character encoding that assigns numeric codes 0-127 to 128 characters. The lower 32 codes (0x00-0x1F) plus 0x7F are control characters inherited from teletypes: NUL (0x00), BEL (0x07, the alert beep), LF (0x0A, line feed), CR (0x0D, carriage return), ESC (0x1B), DEL (0x7F), and so on. Codes 0x20-0x7E are printable: space, the digits 0-9 at 0x30-0x39, the uppercase letters A-Z at 0x41-0x5A, the lowercase letters a-z at 0x61-0x7A, and punctuation between them. The encoding has a deliberately regular structure. The digits are clustered: '0' = 0x30, '1' = 0x31, ..., '9' = 0x39. Converting a digit character to its numeric value is `code - 0x30`. The letters are also clustered: 'A' = 0x41, 'B' = 0x42, ..., 'Z' = 0x5A, and 'a' = 0x61, ..., 'z' = 0x7A. The difference between uppercase and lowercase for the same letter is 0x20 (32), which is exactly one bit set in position 5 (1 << 5 = 32). That makes case conversion a single XOR or OR/AND with 0x20: `code ^ 0x20` flips case, `code | 0x20` lowercases, `code & 0x5F` (= `code & ~0x20`) uppercases. This bit-trick is the fastest possible case conversion and shows up in strlen/strcmp implementations for ASCII-only strings. ASCII was designed for 7-bit teletypes and the 5-level Baudot code that preceded it, so it predates 8-bit bytes. The 8-bit 'extended ASCII' range (0x80-0xFF) was never standardised, which is why so many code pages (ISO 8859-1 Latin-1, Windows-1252, MacRoman, KOI8-R, IBM437) competed for the high half. ISO 8859-1 (Latin-1) was the closest thing to a standard, but even it lacked the Euro sign until ISO 8859-15. The C1 control range (0x80-0x9F) was supposed to be reserved (ISO 6429), but Windows-1252 reused some of it for printable characters — a long-running interoperability pain point that UTF-8 finally resolved. UTF-8 (RFC 3629, 2003) was designed by Rob Pike and Ken Thompson in 1992 as a backward-compatible superset: the 128 ASCII codes encode to themselves as single bytes (0x00-0x7F), so any ASCII text is also a valid UTF-8 text. Codes above 0x7F use 2-, 3-, or 4-byte sequences with specific bit patterns (110xxxxx 10xxxxxx, 1110xxxx 10xxxxxx 10xxxxxx, 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx) so a decoder can resync byte-by-byte after an error. EBCDIC, by contrast, was IBM's 8-bit mainframe encoding (8-bit EBCDIC was 8-bit, not 7-bit like ASCII) and assigns letters to non-contiguous code points ('A' = 0xC1, 'I' = 0xC9, 'J' = 0xD1, ..., with gaps that hurt bit-tricks and string algorithms). National variants of ISO 646 replaced a small set of ASCII characters with country-specific letters. For example, the UK variant replaced 0x23 (the American '#') with the pound sign '£', and the German variant replaced some punctuation with umlauts. This is why C's locale settings and POSIX charmap files were historically important — they mapped between the IRV (International Reference Version) and national variants. The escape from this mess is Unicode / UTF-8, which makes the entire 7-bit and 8-bit debate obsolete for any new project.

  • ASCII (ANSI X3.4-1968, ISO/IEC 646 IRV) uses 7 bits per character with 128 code points: 33 control characters (0x00-0x1F, 0x7F) and 95 printable characters (0x20-0x7E).
  • Control characters (0x00-0x1F, 0x7F) were inherited from teletypes: NUL, BEL (0x07, alert beep), LF (0x0A), CR (0x0D), ESC (0x1B), DEL (0x7F). Modern text still uses LF and CR; the rest are mostly history.
  • Printable layout: space (0x20), digits '0'-'9' (0x30-0x39), uppercase 'A'-'Z' (0x41-0x5A), lowercase 'a'-'z' (0x61-0x7A), punctuation in between. Converting '5' to 5 is `code - 0x30`; upper-to-lower is `code | 0x20`.
  • Case conversion is a single bit op: XOR 0x20 flips case; OR 0x20 lowercases; AND 0x5F (= `code & ~0x20`) uppercases. This is the fastest case conversion in any language and is how strlen/strcmp work on ASCII-only buffers.
  • 8-bit extensions (0x80-0xFF) were never standardised, so Windows-1252, ISO-8859-1, MacRoman, KOI8-R, IBM437 all defined the high half differently. Windows-1252 won on the web and is the de-facto 'extended ASCII' most legacy code uses.
  • UTF-8 (RFC 3629, Pike & Thompson 1992) is a strict superset of ASCII: the 128 ASCII code points encode as themselves in 1 byte; code points above U+007F use 2-4 bytes with 110xxxxx 10xxxxxx continuation bytes, so decoders can resync byte-by-byte after errors.
  • EBCDIC (IBM, 1960s mainframes) is the 8-bit alternative to ASCII used on IBM z/OS. Letter positions are not contiguous ('A'=0xC1, 'I'=0xC9, 'J'=0xD1), so the ASCII case-conversion trick does not work and bit-shift algorithms like tolower() need table lookups.
  • ISO 646 national variants (UK, German, Swedish, etc.) replaced a small set of ASCII characters with country-specific letters: the UK variant swapped '#' for '£' at 0x23, the German variant swapped punctuation for umlauts. Pre-Unicode localisation in a nutshell.

Examples

Quick character lookup

Character: 'A'
  Decimal:  65
  Hex:      0x41
  Binary:   01000001
  Octal:    0101
  C escape: \x41  ('\x41' in C / C++ / Python / JavaScript)

Difference between upper and lower case is 0x20 (32 decimal):
  'a' = 0x61 (97)    =  'A' (0x41) + 0x20
  'A' = 0x41 (65)    =  'a' (0x61) - 0x20
This is why toggling bit 5 (mask 0x20) flips the case of a letter.

  ch ^ 0x20   flips A <-> a   (works for A-Z, a-z, leaves others unchanged)

Debugging newline issues

LF  (0x0A, decimal 10)  - Unix, Linux, modern macOS  '\n'
CR  (0x0D, decimal 13)  - classic Mac OS (pre-OS X), some network protocols  '\r'
CRLF (0x0D 0x0A, '13 10')  - Windows, HTTP, SMTP, FTP  '\r\n'

Hex dump of a Windows-saved 'hi\r\n' file:
  0000:  68 69 0d 0a         hi..

Hex dump of the same content saved on Linux ('hi\n'):
  0000:  68 69 0a            hi.

Effect on line count:
  $ wc -l windows.txt unix.txt
       1 windows.txt    (1 newline, 0x0D 0x0A)
       1 unix.txt       (1 newline, 0x0A)
  The byte count differs (4 vs 3) and tools like dos2unix detect by
  scanning for 0x0D 0x0A pairs and stripping the 0x0D.

URL encoding reference

RFC 3986 unreserved + reserved set (must percent-encode the rest):
  unreserved  A-Z a-z 0-9 - _ . ~
  reserved    ! * ' ( ) ; : @ & = + $ , / ? # [ ]
  encode everything else as %HH, where HH is the 2-digit uppercase hex

Common characters:
  space    0x20  ->  %20   (or '+' inside application/x-www-form-urlencoded)
  !        0x21  ->  %21
  "        0x22  ->  %22
  #        0x23  ->  %23
  $        0x24  ->  %24
  %        0x25  ->  %25
  &        0x26  ->  %26   (separator in query strings - always encode inside values)
  '        0x27  ->  %27
  (        0x28  ->  %28
  )        0x29  ->  %29
  +        0x2B  ->  %2B   (or %20 in form bodies; '+' means space there)
  ,        0x2C  ->  %2C
  /        0x2F  ->  %2F   (reserved in path, often safe in query)
  :        0x3A  ->  %3A
  ;        0x3B  ->  %3B
  =        0x3D  ->  %3D
  ?        0x3F  ->  %3F
  @        0x40  ->  %40

Example:  https://example.com/path with space and ampersand
Encoded:  https://example.com/path%20with%20space%20%26%20ampersand

Control character escapes and regex metacharacters

Common control codes and their escape forms in C / Python / JavaScript strings:
  NUL  0x00  '\0'         (string terminator in C)
  BEL  0x07  '\a'         (terminal bell)
  BS   0x08  '\b'         (backspace)
  TAB  0x09  '\t'         (horizontal tab)
  LF   0x0A  '\n'         (newline)
  VT   0x0B  '\v'         (vertical tab)
  FF   0x0C  '\f'         (form feed)
  CR   0x0D  '\r'         (carriage return)
  ESC  0x1B  '\x1b' / '\e' (POSIX)  (start of escape sequence)
  DEL  0x7F  '\x7f'       (delete)

Regex metacharacters that must be escaped with \:
  ^ $ . | ? * + ( ) [ ] { } \

JavaScript snippet that mirrors the table above:
  const ctrl = { 0:'NUL', 9:'TAB', 10:'LF', 13:'CR', 27:'ESC', 32:'SP', 127:'DEL' };
  for (const [code, name] of Object.entries(ctrl)) {
    console.log(`${code.toString().padStart(3)}  0x${(+code).toString(16).padStart(2,'0')}  ${name}`);
  }
  // ->  ' 0x20 SP'   0a LF   0d CR   etc.

FAQ

How big is the ASCII table?

Standard ASCII has 128 code points (0-127): 33 control characters (0-31 plus 127 DEL) and 95 printable characters (space through ~). 'Extended ASCII' refers to various 256-code-point single-byte encodings like Windows-1252 or ISO-8859-1, which are not actually ASCII.

Why is character 32 listed as 'Space' instead of a visible glyph?

Code point 32 (0x20) is the literal space character. It is printable but invisible. The page shows the label 'SP' or 'Space' so you can copy it; clicking the row still copies a real space character to the clipboard.

What are the first 32 ASCII codes for?

They are control characters from teleprinter days: TAB (9), LF (10), CR (13), ESC (27), and others. Modern software still uses TAB, LF, CR, and NUL (0); the rest (BEL, ACK, ENQ, etc.) are mostly historical and only appear in serial protocols and binary file headers.

Is ASCII the same as UTF-8?

ASCII is a 7-bit encoding for English. UTF-8 is a variable-length encoding that is byte-compatible with ASCII for the first 128 code points - so any pure-ASCII file is also valid UTF-8. UTF-8 extends with 2-4 byte sequences to cover the rest of Unicode.

How do I convert between decimal, hex, and binary for a character?

Pick a row to see all four representations. For example, 'A' is decimal 65, hex 0x41, octal 0101, binary 01000001. The Char column is the literal glyph and the Description column gives the official Unicode name.

Why doesn't this table list é, ñ, or 中?

Those characters are outside the ASCII range. é and ñ are in Latin-1 (codepoints 233 and 241); 中 is in CJK Unified Ideographs (U+4E2D). Use a Unicode lookup tool for them - ASCII only goes up to 127.

How do I type a character if I only know its ASCII code?

On Windows, hold Alt and type the decimal code on the numeric keypad (Alt+65 for A). On macOS and Linux, paste from this table or use the input method's hex code feature. In code, use \xNN (hex), \NNN (octal), or chr(N) (Python) and String.fromCharCode(N) (JavaScript).