This is a searchable reference for the 33 ASCII control characters — the non-printing codes that direct terminals, printers and data streams rather than displaying a glyph. It is built for programmers, sysadmins and anyone debugging serial output, terminal escape sequences or text-encoding issues, where knowing exactly what ^C, \n or 0x1B means saves time.
How it works
The control set covers codes 0 to 31 (the C0 control set) plus DEL at 127. Each row in the table gives the decimal and hexadecimal value, the standard abbreviation, the caret notation (the Ctrl-key combination), any C-style escape sequence, the full name, and a plain-English description of its purpose. You can search by decimal value, abbreviation (like LF), name, or escape sequence (like \n) to jump straight to a code. The caret column maps keystrokes to codes — pressing Ctrl with a letter sends the corresponding control character.
Key codes at a glance
| Dec | Hex | Abbr | Caret | Escape | Meaning |
|---|---|---|---|---|---|
| 0 | 00 | NUL | ^@ | \0 | Null terminator |
| 7 | 07 | BEL | ^G | \a | Bell / alert |
| 8 | 08 | BS | ^H | \b | Backspace |
| 9 | 09 | HT | ^I | \t | Horizontal tab |
| 10 | 0A | LF | ^J | \n | Line feed (Unix newline) |
| 13 | 0D | CR | ^M | \r | Carriage return |
| 27 | 1B | ESC | ^[ | \e | Escape (ANSI sequences) |
| 127 | 7F | DEL | ^? | Delete |
Unix uses LF alone for newlines; Windows uses CR LF together; classic Mac OS used CR alone.
Why these codes still matter today
Despite being defined in the 1960s, control codes are embedded in every layer of modern computing:
Text protocols: HTTP, SMTP, and FTP use CR LF (13 followed by 10) to delimit lines. A lone LF or a missing CR can cause silent interoperability failures between systems. When debugging a protocol issue, knowing which exact byte terminates the line is essential.
ANSI terminal sequences: The ESC character (27, 0x1B) is the gateway to ANSI escape sequences that control terminal colour, cursor movement, and screen clearing. Understanding that ESC begins a sequence — and that ESC followed by [ is the CSI introducer — is the starting point for debugging terminal output or writing terminal-aware CLI tools.
C string handling: NUL (0) terminates C strings. Passing a string with an embedded NUL to a function expecting a C string will silently truncate it at the first zero byte. This class of bug is a common security and correctness issue when handling binary data mixed with text.
Serial and device communication: Control characters were originally designed to control mechanical devices like teletypes. Many are still used in serial protocols: SOH/STX/ETX/EOT delimit messages in some industrial protocols, and BEL (7) still triggers an alert on some devices.
Keyboard shortcuts: The caret notation is not just academic — every Ctrl+letter combination you use in a terminal sends one of these codes. Ctrl+C sends ETX (3), which terminal drivers interpret as an interrupt signal. Ctrl+D sends EOT (4), signalling end of input. Ctrl+Z sends SUB (26), which on Unix suspends the foreground process. Knowing the table tells you exactly what byte your keypress produces.
Caret notation and how it works
Caret notation (^X) is a compact way to write control codes: the letter is the one that, if pressed with Ctrl, produces the code. The relationship is arithmetic: Ctrl+A produces 1 (A=65, 65−64=1), Ctrl+Z produces 26 (Z=90, 90−64=26). The mapping works because the control characters 1–26 correspond exactly to the alphabet at an offset of 64. This regularity was deliberate in ASCII’s original design. Everything runs in your browser; nothing is uploaded.