C0 controls
The C0 controls are the control characters (code positions 0-31 decimal) which are part of the ASCII standard (as adopted in 1967; the earlier 1963 version had somewhat different control character assignments). They are also part of a number of other character sets derived from ASCII, and are in the Unicode set at the same code positions they have in ASCII. The official definition gives particular meanings for each of the characters, though they have also been used in a number of other ways, and some of them are rarely used these days. Some character sets (including Unicode) have a second set of controls called the C1 controls in the equivalent positions with the 8th bit set (128-159 decimal), but those are rarely used in their control meanings (the Windows character sets have printable characters there).
Hex | Dec | Codes | Abbreviation | Name | Description and uses |
---|---|---|---|---|---|
00 | 0 | ^@, \0 | NUL | Null character | Marks unused space or padding (e.g., to intentionally slow down terminals or to leave space for added data in memory or storage media). Used in C-based programming languages to mark end of string. |
01 | 1 | ^A | SOH | Start of Heading | Marks the beginning of a header in a message or data structure. |
02 | 2 | ^B | STX | Start of Text | Marks the beginning of the body text of a message, and/or the end of the header. |
03 | 3 | ^C | ETX | End of Text | Marks the end of the body text. Also used as "break character" (Control-C) to terminate a program or process. |
04 | 4 | ^D | EOT | End of Transmission | In Unix-style operating systems, signals end-of-file and is used to log out of a terminal. On Apple II, this character signalled that what followed was a DOS command when it was "printed" to standard output. |
05 | 5 | ^E | ENQ | Enquiry | Used in transmission protocols to request acknowledgement from the other end to make sure connection is still active. In DEC TOPS-20 mainframes, usually resulted in currently-active application outputing status information to terminal. |
06 | 6 | ^F | ACK | Acknowledge | Sent as response to ENQ message, or used to positively acknowledge receipt of data or messages (as opposed to NAK). |
07 | 7 | ^G, \a | BEL | Bell | On some systems, this causes a bell, buzzer, or beep to sound, or flashes inverse video to alert a system operator. The Apple II had "BELL" on the front side of the "G" key to remind users that Ctrl-G caused this sound effect. |
08 | 8 | ^H, \b | BS | Backspace | Moves back one space. Usually deletes last character (e.g., from input string), but on some old terminals it just moved backward without deleting and allowed "overstrike" effects overlaying multiple characters. |
09 | 9 | ^I, \t | HT | Horizontal Tab | The typewriter "tab key", usually moving to the next tab stop as defined in the particular software being used. |
0A | 10 | ^J, \n | LF | Line Feed | Move down one line. In Unix-style operating systems, it also moves to the beginning of the next line so that it can be used as a line break (newline) character, while in some other systems and terminals it just moves down without moving to the left, requiring the "CR LF" sequence to break a line. |
0B | 11 | ^K, \v | VT | Vertical Tab | Moves to vertical tab stops; not used nearly as often as the more-common horizontal tab. |
0C | 12 | ^L, \f | FF | Form Feed | Causes page to eject in printers, and may clear the screen in some terminal emulators. Sometimes used as a logical division of sections of a document. |
0D | 13 | ^M, \r | CR | Carriage Return | Moves to the beginning of the line. In some systems (e.g., Apple II, Commodore 64, and TRS-80, and early Macintosh systems before its OS switched to a Unix-based system), also moves to the next line so that it can be used as a line break character, while in other systems it stays on the same line so that it must be accompanied by a LF character to break a line (but on some printing terminals CR with no LF was used for overstrike effects including underlining by printing underscores). Thus the three different line-break conventions (LF, CR, and CR+LF) arose, which bedevil users of text files to this day. As an input character, CR is generally mapped onto the Enter key, signaling the completion of input. |
0E | 14 | ^N | SO | Shift Out | Switch to alternate character set (reversed by SI). Used in various systems and terminals to set different characters (e.g., APL or Cyrillic), or change the color or font. |
0F | 15 | ^O | SI | Shift In | Return to normal character set (reverses operation of SO). |
10 | 16 | ^P | DLE | Data Link Escape | Signals the start of a sequence of raw data as opposed to normal printable or control characters. |
11 | 17 | ^Q | DC1 | Device Control 1 | One of four device-control codes intended to be system-specific. This one (CTRL-Q, also known as XON) is often used to resume operations of a process, device, or output stream that has been paused with CTRL-S (XOFF). |
12 | 18 | ^R | DC2 | Device Control 2 | Another device-control code; not used as much as DC1 and DC3. |
13 | 19 | ^S | DC3 | Device Control 3 | The third of the device-control codes; this one (CTRL-S, also known as XOFF) is often used to pause processes, devices, or output streams, with CTRL-Q (XON) resuming them (though in some cases, any keypress causes output to resume). |
14 | 20 | ^T | DC4 | Device Control 4 | The fourth device-control code; not used as much as DC1 or DC3. In DEC TOPS-20 mainframes, usually resulted in output of system status to terminal. |
15 | 21 | ^U | NAK | Negative Acknowledge | In transmission protocols, indicates a failure requiring a re-send, or a negative response to a query of whether the process is ready to proceed. |
16 | 22 | ^V | SYN | Synchronous Idle | Signals that a correction may now be received in synchronous transmission protocols. |
17 | 23 | ^W | ETB | End of Transmission Block | Marks the end of a block of data divided into blocks for transmission. |
18 | 24 | ^X | CAN | Cancel | Cancels an operation and signals that previously-sent data can be disregarded. |
19 | 25 | ^Y | EM | End of Medium | Marks the end of a physical medium such as a data-storage tape. |
1A | 26 | ^Z | SUB | Substitute Character | Used to mark the spot where garbled, missing, or incomplete characters were received due to transmission errors, or various other uses involving place-holder characters. This character (Ctrl-Z) is also used by MS/PC-DOS to mark the end of a file or input stream, calling it EOF (although CTRL-D, EOT, would have been more standards-compliant and is used by Unix-style OSs for this purpose; however, some DEC operating systems used the CTRL-Z convention and this is what was followed by PC-DOS). |
1B | 27 | ^[ | ESC | Escape | Mapped onto the ESC key on keyboards, this usually signals a user attempting to exit a menu or mode. It is also commonly used in printer and terminal control protocols to signal the beginning of a special "escape sequence" where immediately-following characters are interpreted as commands. |
1C | 28 | ^\ | FS | File Separator | One of four separator characters intended to delimit structured data. FS is the highest-level separator, intended to separate structures which are in turn internally delimited with GS, RS, and US (in descending order). Also used as a "quit and dump core" signal in Unix shells. |
1D | 29 | ^] | GS | Group Separator | The second of four separator characters, subordinate to FS, but higher-level than RS and US. |
1E | 30 | ^^ | RS | Record Separator | The third of four separator characters, subordinate to FS and GS, but higher-level than US. |
1F | 31 | ^_ | US | Unit Separator | The lowest-level of the separator characters, used to divide strings of ASCII characters which are the base elements of a data structure. A sequence of such US-delimited strings can in turn be used as a higher-level data element separated by other such elements by the RS character, and this structure in turn can be delimited from other such elements by GS, and finally if a fourth level is needed the FS character separates those elements. |