Кодировка ASCII: Текст, Десятичные, Hex, Двоичные и Восьмеричные числа
ASCII сопоставляет каждый печатный символ числу от 0 до 127. Понимание этих чисел в десятичной, шестнадцатеричной, двоичной и восьмеричной системах — навык, который разработчик использует чаще, чем ожидает.
Что такое ASCII?
ASCII расшифровывается как American Standard Code for Information Interchange (Американский стандартный код обмена информацией). Опубликован в 1963 году; определяет соответствие 128 символов целым числам от 0 до 127. Эти 128 символов включают английский алфавит (заглавные и строчные буквы), цифры 0–9, знаки пунктуации и 33 управляющих символа: перевод строки, табуляция, возврат каретки и другие.
Кириллица не входит в стандартный диапазон ASCII 0–127. Именно поэтому в истории русскоязычных компьютеров сложилась целая экосистема несовместимых кодировок: KOI8-R (стандарт де-факто в Unix-среде с 1990-х), CP866 (MS-DOS), Windows-1251. При обмене файлами между системами с разными кодировками получалась знаменитая "кракозябра". UTF-8 окончательно решил эту проблему в 2000-х, сохранив полную обратную совместимость с ASCII.
Почему разработчики до сих пор используют ASCII
- Чтение бинарных файлов: В hex-редакторе правая панель показывает ASCII-интерпретацию каждого байта. Знание того, что
0x48 0x54 0x54 0x50— это "HTTP", даёт мгновенную ориентацию. - Отладка сетевых протоколов: Сырой TCP и HTTP-трафик — это ASCII-текст. Дамп пакетов становится читаемым, когда знаешь таблицу.
- URL-кодирование: Пробел — ASCII 32 (
0x20), поэтому в URL он превращается в%20. Знак процента следует за hex-значением ASCII-кода. - Управляющие последовательности:
\n— ASCII 10,\t— ASCII 9,\r— ASCII 13. Когда лог-файл выглядит сломанным, чаще всего виноват один из них. - Унаследованные системы: Мейнфреймы, встроенное ПО и последовательные протоколы спроектированы вокруг ASCII.
Четыре системы счисления на одном примере
Буква A — лучший пример, потому что её значения легко запомнить во всех четырёх системах.
| Система | Значение для "A" | Пояснение |
|---|---|---|
| Десятичная | 65 | Основание 10, привычная система счёта |
| Шестнадцатеричная | 0x41 | Основание 16; 4×16 + 1 = 65 |
| Двоичная | 01000001 | Основание 2; реальные биты в памяти |
| Восьмеричная | 101 | Основание 8; 1×64 + 0×8 + 1 = 65 |
Строчная a — десятичное 97 (0x61). Разница между заглавной и строчной буквой ровно 32 — то же значение, что у пробела. Это не случайность: намеренное решение, позволяющее менять регистр одним изменением бита.
Практические примеры
URL-кодирование
Когда браузер кодирует URL, он берёт ASCII-значение каждого небезопасного символа и записывает его как знак процента с двумя hex-цифрами. Пробел (ASCII 32 = 0x20) становится %20. Используйте Кодировщик/Декодировщик URL для мгновенного кодирования и декодирования URL.
Управляющие последовательности
\n— ASCII 10, перевод строки\r— ASCII 13, возврат каретки (конец строки в Windows:\r\n)\t— ASCII 9, горизонтальная табуляция\0— ASCII 0, нулевой символ (терминатор строки в C)\x41— hex-эскейп; ASCII 65 = "A"
Чтение бинарных файлов
PNG-файлы начинаются с байтов 89 50 4E 47 в hex; средние байты (50 4E 47) — ASCII для "PNG". ZIP-файлы начинаются с 50 4B: "PK" (инициалы Фила Каца, автора формата). Эти сигнатуры позволяют определять тип файла без опоры на расширение.
Расширенный ASCII и Unicode
Стандартный ASCII охватывает 128 символов — достаточно для английского, но не для других языков. Различные схемы "расширенного ASCII" использовали 8-й бит для добавления ещё 128 символов, но единого стандарта не было. KOI8-R, CP866 и Windows-1251 использовали один и тот же диапазон байтов для разных символов кириллицы — отсюда и бесконечные проблемы при обмене файлами между Windows и Linux в 1990-х и 2000-х.
Unicode решил эту проблему, назначив уникальный номер каждому символу всех систем письма. UTF-8 обратно совместим с ASCII: первые 128 кодовых точек Unicode идентичны ASCII. Сегодня UTF-8 — стандарт де-факто для веба и Linux-систем.
Связанные инструменты
Конвертер двоичного в текст переводит сырые двоичные строки в читаемый текст. Для конвертации между системами счисления Конвертер систем счисления работает с десятичной, шестнадцатеричной, двоичной и восьмеричной.
Часто задаваемые вопросы
Какое ASCII-значение у пробела?
Пробел — ASCII 32 (десятичное), 0x20 (hex), 00100000 (двоичное). Это наименьший печатный символ ASCII; всё ниже 32 — управляющие символы.
Почему кириллица не входит в ASCII?
ASCII 0–127 разрабатывался исключительно для английского алфавита. Кириллица была добавлена в расширенных кодировках (KOI8-R, CP866, Windows-1251) и окончательно стандартизирована в Unicode.
В чём разница между ASCII и Unicode?
ASCII определяет 128 символов; Unicode — свыше 140 000. Первые 128 кодовых точек Unicode идентичны ASCII, поэтому ASCII-текст, закодированный в UTF-8, побайтно совпадает с обычным ASCII.
Как перевести текст в ASCII-коды программно?
В большинстве языков это одна операция: ord("A") в Python, "A".charCodeAt(0) в JavaScript, (int)'A' в C. Обратно: chr(65) в Python, String.fromCharCode(65) в JavaScript, (char)65 в C.
Конвертируйте любой текст в ASCII прямо сейчас
Вставьте любой текст и сразу получите десятичные, hex, двоичные и восьмеричные значения каждого символа.