Как перевести двоичный код в текст
- Вставьте двоичный код в поле Ввод · Двоичный. Байты можно разделять пробелами, переводами строк, запятыми, точками с запятой или
|, а можно не разделять вовсе. - Текст появляется в поле Результат · Текст по мере ввода.
- Если вы видите
�, значит, биты не складываются в корректный UTF-8. Попробуйте другую Кодировку под результатом, например ISO-8859-1. - Скопировать результат копирует текст. Кнопка Текст → Двоичный над инструментом меняет направление, как и страница Текст в двоичный код.
Как прочитать двоичный код вручную
Каждая группа из 8 бит составляет один байт. Присвойте каждой позиции значение, от 128 слева до 1 справа, и сложите значения позиций, где стоит 1:
| Бит | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
|---|---|---|---|---|---|---|---|---|
| Значение | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
01001000 равно 64 + 8 = 72, а символ 72 в ASCII – H. 01101001 равно 64 + 32 + 8 + 1 = 105, то есть i.
Для букв арифметика нужна редко, потому что ASCII устроен по шаблону. Первые три бита говорят, что это за символ, а у букв последние пять бит дают номер в алфавите:
| Начинается с | Значение | Примеры |
|---|---|---|
010 | заглавная буква | 01000001 A, 01001000 H, 01011010 Z |
011 | строчная буква | 01100001 a, 01101001 i, 01111010 z |
0011 | цифра | 00110000 0, 00111001 9 |
00100000 | пробел |
Так, 01000011 заканчивается на 00011, то есть 3, третья буква: C. Заглавную букву от строчной отличает один бит, третий слева.
Какие форматы понимает переводчик
| Ввод | Как читается |
|---|---|
01001000 01101001 | 8-битные группы через пробелы или переводы строк |
01001000,01101001 или 01001000;01101001 | разделители: запятые, точки с запятой или | |
0b01001000 0b01101001 | префиксы 0b игнорируются |
1001000 1101001 | 7-битные группы, как в классических упражнениях на 7-битный ASCII |
0100100001101001 | одна строка битов, разрезанная на куски по 8 бит |
Всё это декодируется в Hi. Группа короче 8 бит читается как один байт, поэтому 7-битный вариант работает. Если какая-то группа длиннее 8 бит, инструмент склеивает все биты в одну строку и режет на байты уже её. Всё, кроме 0, 1 и разделителей, останавливает преобразование с указанием позиции неверного символа; кнопка Показать рядом с сообщением выделяет его во вводе.
Двоичный код с многобайтовыми символами UTF-8
Байты ASCII всегда начинаются с 0. Байт, который начинается с 1, относится к многобайтовому символу UTF-8, а его ведущие биты говорят, какой длины последовательность:
| Символ | Биты UTF-8 | Шаблон |
|---|---|---|
é | 11000011 10101001 | 110 начинает 2-байтовый символ, 10 его продолжает |
€ | 11100010 10000010 10101100 | 1110 начинает 3-байтовый символ |
👋 | 11110000 10011111 10010001 10001011 | 11110 начинает 4-байтовый символ |
Если декодировать их по одному байту, получится мусор вроде é. Держите байты вместе и оставьте Кодировку UTF-8.
От двоичного кода к Base64
Двоичный код, hex и Base64 записывают одни и те же байты. Двоичному коду нужно 8 символов на байт, hex – 2, Base64 – около 1,33, поэтому системы передают двоичные данные через текст именно в Base64: почтовые вложения, поля JSON, data URI. Чтобы сразу превратить биты в Base64, используйте Двоичный код в Base64. Чтобы увидеть биты внутри строки Base64, используйте Base64 в двоичный код; как Base64 перегруппировывает эти биты по 6, показывает статья как работает Base64.
Двоичный код в текст в коде
bits = "01001000 01101001"
bytes(int(b, 2) for b in bits.split()).decode("utf-8") # 'Hi'
const bits = "01001000 01101001";
new TextDecoder().decode(Uint8Array.from(bits.split(" "), b => parseInt(b, 2))); // 'Hi'
Оба фрагмента рассчитаны на группы, разделённые одиночными пробелами; инструмент выше куда терпимее к формату ввода.
Вопросы и ответы
Что означает 01001001 00100000 01101100 01101111 01110110 01100101 00100000 01111001 01101111 01110101?
I love you. Каждая 8-битная группа кодирует один символ ASCII, а 00100000 означает пробел между словами.
Сколько двоичных цифр нужно на одну букву?
Восемь, то есть один байт, для любой буквы или цифры в обычном ASCII-тексте. Буквы с диакритикой и кириллица в UTF-8 занимают 16 бит, большинство других письменностей – 16 или 24, эмодзи – 32.
Можно перевести двоичный код без пробелов?
Да. Сплошная строка вроде 0100100001101001 режется слева на куски по 8 бит. Её длина должна быть кратна 8, иначе инструмент сообщит, сколько битов нашёл.
Почему двоичный код переводится в абракадабру?
Обычно в строке без пробелов не хватает бита или есть лишний, и все следующие байты сдвигаются. Если можете, расставьте пробелы между байтами: тогда одна битая группа испортит один символ, а остальные прочитаются правильно.