Free Online ASCII Encoder & Decoder

Convert text to ASCII decimal codes and back. View character-to-code mappings with configurable output formats.

text_fields Input
code ASCII Output
Character ASCII Code
Enter text and click Encode to see mapping

Key Features

bolt

Instant Processing

All operations run locally in your browser for instant, zero-latency results.

lock

Privacy Protected

Your data never leaves your browser. No server storage or tracking.

Understanding ASCII Encoding: From Telegraph Codes to Modern Computing

The History and Evolution of Character Encoding

ASCII, or the American Standard Code for Information Interchange, was first published in 1963 by the American Standards Association (ASA). Before ASCII, each computer manufacturer used their own proprietary encoding schemes — IBM used EBCDIC, while other systems used Baudot code or six-bit encoding formats that could only represent 64 characters. This fragmentation made data exchange between different computer systems nearly impossible. ASCII standardized on a 7-bit encoding scheme, providing 128 unique codes (0-127) that could represent all English letters, digits, punctuation marks, and control characters. The design was remarkably forward-thinking: uppercase and lowercase letters differ by exactly one bit (bit 6), making case-insensitive comparison trivial in hardware. Position 32 (0x20) was assigned to the space character, and position 127 (0x7F) to DEL, which was originally designed to punch holes in paper tape to delete characters. The ASCII table remains the foundation of virtually all modern text processing despite being over six decades old.

ASCII Table Structure: The 128 Characters Explained

The ASCII table is organized into several logical groups. Codes 0-31 (0x00-0x1F) are control characters — non-printable codes that controlled teletype machines and early computer terminals. These include NUL (0x00) used as string terminators in C, LF (0x0A, line feed) for new lines, CR (0x0D, carriage return) to return the cursor to column zero, BEL (0x07) which rang a bell on teletypes, and ESC (0x1B) for introducing escape sequences. Code 32 (0x20) is the space character, followed by punctuation and digits 0-9 (codes 48-57, 0x30-0x39). Uppercase letters A-Z occupy codes 65-90 (0x41-0x5A), while lowercase a-z occupy codes 97-122 (0x61-0x7A). Notice that the lowercase range starts exactly 32 positions after uppercase — this intentional design makes case conversion a simple bit-flip operation. The remaining codes 91-96 and 123-126 contain bracket characters, backtick, pipe, and tilde. Understanding this structure is essential for low-level programming, network protocol debugging, and embedded systems work.

Control Characters: The Hidden Layer of ASCII

The first 32 ASCII codes are often overlooked by modern developers, but they tell the story of computing's teletype and terminal heritage. STX (0x02) and ETX (0x03) marked start and end of text in transmission, still reflected in the binary protocol design of modern systems. ACK (0x06) and NAK (0x15) provided acknowledgment and negative acknowledgment for error control. DC1-DC4 (0x11-0x14) were device control codes used to turn peripherals on and off. SUB (0x1A) was used as a substitute character, and famously marks end-of-file in some legacy systems. In modern practice, only a handful of these remain widely used: NUL as string terminators, TAB (0x09) for horizontal tabulation, LF and CR for line endings (with the infamous Windows vs Unix newline incompatibility stemming from CR+LF vs LF-only conventions), and ESC for ANSI escape codes in terminal emulators. When working with serial protocols, binary file formats, or network packet analysis, recognizing these control characters is crucial for correctly parsing data streams.

Using charCodeAt() and fromCharCode() Across Programming Languages

The fundamental operations of ASCII encoding — converting characters to their numeric codes and vice versa — are supported across every major programming language. In JavaScript, String.prototype.charCodeAt(index) returns the UTF-16 code unit at a given position (for ASCII characters, this matches the ASCII code), while String.fromCharCode(code) converts a numeric code back to a character. For example, "Hello".charCodeAt(0) returns 72, and String.fromCharCode(72) returns "H". Python offers ord('A') returning 65 and chr(65) returning 'A'. In Java, (int) 'A' casts to 65 and (char) 65 casts back. C and C++ treat characters as integers directly — char c = 'A'; int code = c; assigns 65. Go uses rune('A') for the code point and string(rune(65)) for conversion back. PHP provides ord('A') and chr(65). When working with full strings rather than individual characters, JavaScript's split('').map(c => c.charCodeAt(0)) converts an entire string to an array of ASCII codes, while String.fromCharCode(...codes) reconstructs it. This pattern is used extensively in data serialization, network protocol implementation, and cryptographic preprocessing where binary representations of text are required.

Practical ASCII Encoding Applications

ASCII encoding is fundamental to numerous real-world applications. Network protocols like HTTP, SMTP, FTP, and DNS transmit commands and headers in plain ASCII, making them human-readable over the wire. When debugging with tools like Wireshark or tcpdump, the ability to mentally convert between hex bytes and ASCII characters is invaluable for quick protocol analysis. Embedded systems and microcontrollers frequently use ASCII-based command interfaces due to their simplicity — a temperature sensor might respond to "TEMP\r\n" with "25.4\r\n" using pure ASCII. Cryptographic operations like HMAC and digital signatures first convert text to bytes using ASCII (or UTF-8) encoding before processing. File formats including HTML, XML, JSON, and YAML are all ASCII-compatible text formats. Even binary formats like PNG and JPEG use ASCII headers — every PNG file starts with the bytes 0x89 'P' 'N' 'G', and JPEG files begin with 0xFF 0xD8. This universal compatibility across systems, languages, and protocols makes ASCII encoding literacy a core skill for any developer working with data interchange.

Detecting Character Encoding in Practice

When processing text from unknown sources, detecting the character encoding is a common challenge. Pure ASCII text is straightforward: if every byte is in the range 0-127, it is valid ASCII. However, many files labeled as "ASCII" actually contain extended characters (128-255) under various encodings. For UTF-8 detection, look for byte sequences matching the UTF-8 multi-byte pattern: 0xC2-0xDF followed by 0x80-0xBF for two-byte sequences, 0xE0-0xEF followed by two continuation bytes for three-byte sequences, and 0xF0-0xF4 followed by three continuation bytes for four-byte sequences. ISO-8859-1 (Latin-1) uses bytes 128-255 directly for accented characters without multi-byte sequences. Windows-1252 is similar but replaces some control codes in the 0x80-0x9F range with printable characters. For confident detection, use libraries like Mozilla's chardet (Python) or jschardet (JavaScript), which employ statistical analysis to determine the most likely encoding. In the browser, the TextEncoder and TextDecoder APIs provide standard-compliant conversion between strings and typed arrays in any supported encoding, making client-side encoding detection reliable without external dependencies.

Frequently Asked Questions

Basics
What is the difference between ASCII and UTF-8?expand_more
ASCII defines 128 characters using 7 bits (0-127), covering English letters, digits, and basic punctuation. UTF-8 is a superset that extends to millions of code points using multi-byte sequences. This tool handles the standard 7-bit ASCII range (0-127).
Why does the letter A map to 65 and not 1?expand_more
The ASCII standard was defined in 1963 with a specific layout. Uppercase A was placed at position 65 (0x41) so that flipping bit 6 turns uppercase into lowercase (A=65, a=97; difference is exactly 32). Codes 0-31 were reserved for control characters.
Usage Tips
What output delimiter should I use for my programming language?expand_more
Use Space Separated for general readability. Use Comma Separated for CSV import or JavaScript arrays. Use Array Format for directly pasting into C, Java, or Go code as an initialized integer array.
Does this tool handle extended ASCII (128-255)?expand_more
No, this tool operates on standard 7-bit ASCII (0-127). The range 128-255 belongs to various extended ASCII schemes. For characters beyond 0-127, use the Unicode Converter or Hex Encoder/Decoder instead.