| Value | Meaning |
|---|---|
| nul'\x00' | Null |
| soh'\x01' | Start of heading |
| stx'\x02' | Start of text |
| etx'\x03' | End of text |
| eot'\x04' | End of transmission |
| enq'\x05' | Enquiry |
| ack'\x06' | Acknowledge |
| bel'\x07' | Bell |
| bs'\x08' | Backspace |
| tab'\x09' | Horizontal tab |
| lf'\x0A' | NL line feed, new line |
| vt'\x0B' | Vertical tab |
| ff'\x0C' | NP form feed, new page |
| cr'\x0D' | Carriage return |
| so'\x0E' | Shift out |
| si'\x0F' | Shift in |
| dle'\x10' | Data link escape |
| dc1'\x11' | Device control 1 |
| dc2'\x12' | Device control 2 |
| dc3'\x13' | Device control 3 |
| dc4'\x14' | Device control 4 |
| nak'\x15' | Negative acknowledge |
| syn'\x16' | Synchronous idle |
| etb'\x17' | End of transmission block |
| can'\x18' | Cancel |
| em'\x19' | End of medium |
| sub'\x1A' | Substitute |
| esc'\x1B' | Escape |
| fs'\x1C' | File separator |
| gs'\x1D' | Group separator |
| rs'\x1E' | Record separator |
| us'\x1F' | Unit separator |
| del'\x7F' | Delete |
import std.algorithm.comparison, std.algorithm.searching, std.range, std.traits; // Because all ASCII characters fit in char, so do these static assert(ControlChar.ack.sizeof == 1); // All control characters except del are in row starting from 0 static assert(EnumMembers!ControlChar.only.until(ControlChar.del).equal(iota(32))); static assert(ControlChar.nul == '\0'); static assert(ControlChar.bel == '\a'); static assert(ControlChar.bs == '\b'); static assert(ControlChar.ff == '\f'); static assert(ControlChar.lf == '\n'); static assert(ControlChar.cr == '\r'); static assert(ControlChar.tab == '\t'); static assert(ControlChar.vt == '\v');
import std.conv; //Control character table can be used in place of hexcodes. with (ControlChar) assert(text("Phobos", us, "Deimos", us, "Tango", rs) == "Phobos\x1FDeimos\x1FTango\x1E");
All control characters in the ASCII table (source).