Кодирование текста в ASCII: коды, биты и объём
Компьютер не хранит буквы напрямую: внутри памяти есть только числа, а точнее нули и единицы. Чтобы текст можно было записать, передать и снова прочитать, каждому символу заранее сопоставляют число - его код. Самая известная такая таблица соответствий и есть ASCII (American Standard Code for Information Interchange). Кодирование текстовой информации в ASCII - это перевод каждого символа строки в его числовой код, а кода - в двоичный вид, который и хранится в памяти. Ниже разберём, как устроена таблица, как перевести символ в двоичный и шестнадцатеричный код, как посчитать объём текста в битах и байтах и чем ASCII отличается от современного Unicode. Чтобы сразу увидеть всю цепочку на своей строке, впишите её в калькулятор ниже: он покажет код, биты и объём каждого символа.
Что такое ASCII и код символа
ASCII - это таблица, в которой каждому символу сопоставлено целое число от 0 до 127. Заглавная латинская A имеет код 65, строчная a - код 97, цифра 0 - код 48, пробел - код 32. Эти числа не случайны: буквы идут подряд по алфавиту, поэтому из кода буквы легко получить соседнюю, прибавив или вычтя единицу, а заглавные и строчные отличаются ровно на 32.
Коды от 0 до 31 - это управляющие символы (перевод строки, табуляция, конец строки), они не печатаются. Коды от 32 до 126 - печатаемые знаки: пробел, цифры, латинские буквы и знаки препинания. Код 127 - служебный символ удаления. Именно поэтому в чистом ASCII всего 128 позиций, и каждой хватает семи двоичных разрядов.
Как перевести символ в двоичный код
Перевод символа в двоичный код идёт в два шага. Сначала по таблице находим десятичный код символа, затем переводим это число в двоичную систему счисления. Например, для буквы H код равен 72. Раскладываем 72 по степеням двойки:
значит, в двоичном виде это . Чтобы все символы занимали одинаковое место, код дополняют нулями слева до нужной разрядности. В чистом ASCII это 7 бит, но на практике под символ почти всегда отводят целый байт - 8 бит, поэтому H записывают как .
Общая формула для кода символа через двоичные разряды выглядит так:
где - значение -го разряда (0 или 1), а - разрядность. Старший разряд стоит слева. Калькулятор выше делает ровно это для каждого символа строки: подсвечивает синим единичные биты и серым - нулевые, так что виден характерный рисунок каждого байта.

Шестнадцатеричный код и почему он удобен
Двоичная запись точна, но длинна: один символ - это восемь нулей и единиц подряд, в которых легко запутаться. Поэтому байт чаще записывают в шестнадцатеричной системе, где одна цифра заменяет сразу четыре бита. Байт делится на две половинки по 4 бита, и каждая превращается в одну цифру от 0 до F:
Так буква H в шестнадцатеричном виде - это (или 0x48), буква A - , цифра 0 - . Шестнадцатеричный код вдвое короче двоичного и однозначно с ним связан, поэтому им пользуются в редакторах кода, при отладке и в веб-разработке. Переключите разрядность в калькуляторе и сравните, как меняется длина двоичного кода, тогда как десятичный и шестнадцатеричный остаются прежними.
Сколько бит и байт занимает текст
Объём текста в ASCII считается очень просто, потому что каждый символ занимает фиксированное место. Если в строке символов, а на символ отводится бит, то весь текст занимает:
При стандартном байтовом хранении , поэтому число байт равно числу символов: строка из 10 знаков - это 10 байт. Например, фраза Hi! состоит из трёх символов, значит, занимает бита, или 3 байта. Здесь важно помнить, что пробелы и знаки препинания - тоже символы со своими кодами, их обязательно считают.

Калькулятор сверху сразу показывает три числа - количество символов, всего бит и всего байт, - так что можно проверить расчёт объёма для любой строки. Это типовая школьная и вузовская задача: дана фраза, нужно найти её информационный объём в байтах при заданной разрядности кодировки.
Чем ASCII отличается от Unicode
У ASCII есть жёсткое ограничение: всего 128 кодов, а с расширенной таблицей (8 бит) - 256. Этого хватает для латиницы, но не для кириллицы, иероглифов или эмодзи. Поэтому появился Unicode - единая таблица для всех письменностей мира, в которой уже сотни тысяч символов. Способ записи Unicode-кодов в байты называется кодировкой; самая распространённая - UTF-8.
UTF-8 устроен совместимо с ASCII: первые 128 символов в нём кодируются одним байтом точно так же, как в ASCII, поэтому латинский текст в UTF-8 и ASCII выглядит одинаково. А вот кириллическая буква в UTF-8 занимает уже два байта, а редкий иероглиф - три или четыре. Если в калькуляторе ввести русскую букву, он отметит, что символ выходит за пределы таблицы ASCII: в чистом ASCII его записать нельзя.
Частые ошибки
- Путают код символа и сам символ. Код цифры 0 в ASCII - это 48, а не 0. Чтобы из символа-цифры получить её числовое значение, из кода вычитают 48.
- Забывают считать пробелы и знаки препинания. В объёме текста учитывается каждый символ, включая пробелы, запятые и точки - у каждого свой код.
- Не дополняют двоичный код нулями. При байтовом хранении код всегда занимает 8 разрядов: 72 это , а не , иначе сместится разрядность.
- Считают, что русская буква помещается в один байт ASCII. Кириллицы в таблице ASCII нет: для неё нужен Unicode, и в UTF-8 такая буква занимает два байта.
- Смешивают системы счисления. Десятичный 48, двоичный и шестнадцатеричный - это один и тот же код символа 0, записанный по-разному; их нельзя сравнивать как обычные числа без перевода.
FAQ
Какой код у буквы A в ASCII? Заглавная латинская A имеет десятичный код 65, что в двоичном виде равно , а в шестнадцатеричном - . Строчная a идёт под кодом 97, ровно на 32 больше.
Сколько байт занимает один символ в ASCII? Один символ ASCII занимает один байт (8 бит) при стандартном хранении или 7 бит в чистом виде. Поэтому объём текста в байтах равен количеству символов в нём, включая пробелы и знаки препинания.
Можно ли закодировать русский текст в ASCII? Нет, в таблице ASCII только латиница, цифры и знаки препинания - кириллицы там нет. Для русского текста используют Unicode и кодировку UTF-8, где каждая русская буква занимает два байта.
Коротко
Кодирование текста в ASCII - это сопоставление каждому символу числа от 0 до 127 и перевод этого кода в двоичный или шестнадцатеричный вид для хранения в памяти. Десятичный код находят по таблице, двоичный получают разложением по степеням двойки и дополняют нулями до 8 бит, а шестнадцатеричный сворачивает каждые 4 бита в одну цифру. Объём текста равен бит, то есть при байтовом хранении число байт совпадает с числом символов. Для языков за пределами латиницы ASCII не хватает - там работает Unicode и совместимая с ASCII кодировка UTF-8.
Читайте также

Дополнительный код: представление отрицательных чисел
Как работает дополнительный код в двоичных системах: диапазон значений, перевод отрицательного числа, разбор по весам разрядов, переполнение и типичные ошибки в задачах.

230 пространственных групп симметрии: откуда берётся число
230 пространственных групп симметрии в кристаллографии: как из 32 точечных групп, 14 решёток Браве и трансляций получается ровно 230 групп Фёдорова, и зачем это нужно.

Декогеренция квантовой системы: как теряется суперпозиция
Декогеренция квантовой системы простыми словами: почему суперпозиция разрушается при взаимодействии со средой, как считать время декогеренции и чем она отличается от коллапса волновой функции.