Конвертер текста в двоичный код

Переводите текст в двоичный код — его байты в UTF-8, по восемь цифр на байт — и двоичный код обратно в текст, со строкой и столбцом лишнего символа.

Ввод
Вывод
11010000 10011111 11010001 10000000 11010000 10111000 11010000 10110010 11010000 10110101 11010001 10000010

Как текст превращается в нули и единицы

Компьютер хранит текст в виде байтов, а байт — это восемь бит, каждый из которых равен 0 или 1. Эта страница показывает вам эти байты: введите текст, и каждый байт выйдет восемью двоичными цифрами, с пробелом между одним байтом и следующим, или вставьте двоичный код и прочитайте текст, который из него складывается. Она работает в обоих направлениях, выполняется целиком в вашем браузере и открывается на примере, который уже переведён.

Из каких байтов состоит текст, зависит от его кодировки, и здесь это UTF-8, если вы не выберете другую, потому что UTF-8 — это то, что хранят веб-страницы, URL-адреса и большинство текстовых файлов. Переключатель «Единица» определяет, что обозначает одна группа цифр: байт UTF-8, байт UTF-16 в любом из двух порядков байтов или одну кодовую точку. Выбранная вами единица действует в обоих направлениях, и страница никогда не меняет её за вас. Когда вставленное похоже на другую единицу, страница говорит об этом и ставит рядом с замечанием кнопку, и ничего не переключается, пока вы её не нажмёте.

Почему каждый байт записывается восемью цифрами

Бит — это одна двоичная цифра, а байт — восемь таких цифр. Восемь бит можно выставить 256 способами, поэтому байт хранит целое число от 0, то есть 00000000, до 255, то есть 11111111. В байтах измеряют файлы, память и то, что передаётся по сети, и на любой машине, которая вам, скорее всего, встретится, байт — это восемь бит; сетевые стандарты называют его октетом, а это слово может означать только восемь.

Первые 128 из этих значений — это ASCII, код для английских букв, цифр и распространённых знаков препинания, а 128 значениям нужно лишь семь бит. Поэтому байт любого символа ASCII начинается с 0, а UTF-8 оставляет байты, начинающиеся с 1, для всего, чего в ASCII нет. Страница записывает каждый байт всеми восемью цифрами, включая ведущие нули, ещё и по практической причине: байты одной фиксированной ширины можно прочитать обратно без пробелов между ними, по восемь цифр за раз.

Буква H, бит за битом

Возьмите прописную H. В ASCII у неё номер 72, а 72 в виде байта — это 01001000. Если читать слева, восемь разрядов весят 128, 64, 32, 16, 8, 4, 2 и 1, и каждая 1 добавляет вес своего разряда: у этого байта единицы стоят в разрядах с весом 64 и 8, а 64 и 8 дают 72. Строчная i — это 105, то есть 64, 32, 8 и 1, поэтому Hi выходит как 01001000 01101001.

Регистр — это один бит. Строчная h — это 01101000, байт H с включённым разрядом весом 32, и то же верно для каждой буквы английского алфавита, потому что ASCII даёт каждой строчной букве номер ровно на 32 больше, чем у её прописной.

Переключатель «Основание» записывает тот же байт другими способами, не меняя его. Если выбрать «Десятичная», H — это 72; «Шестнадцатеричная» — 48; «Восьмеричная» — 110. Это один байт, записанный четырьмя способами, и при чтении цифры принимаются обратно по тому основанию, которое вы выбрали. Конвертер текста в шестнадцатеричный код открывается с основанием «Шестнадцатеричная», где байт занимает две цифры, а не восемь.

Почему буква за пределами ASCII занимает два байта или больше

ASCII заканчивается на 127. У буквы с диакритикой, у буквы кириллицы, еврейского или арабского алфавита, у японского или корейского символа и у эмодзи кодовые точки лежат дальше, а UTF-8 записывает символ одним байтом, только если это ASCII, оставляя байты, начинающиеся с 1, для всего остального. Поэтому каждый из них занимает два, три или четыре байта, и в двоичном коде видно, как это происходит, потому что первые биты каждого байта говорят, какой частью символа этот байт является:

  • 0xxxxxxx — символ в одном байте: ASCII, семь бит которого записаны на месте x. H — это 01001000.
  • 110xxxxx 10xxxxxx — символ в двух байтах, для кодовых точек до 2 047, что охватывает буквы с диакритикой европейских языков, а также кириллицу, еврейский и арабский алфавиты. é — это 11000011 10101001, а א — 11010111 10010000.
  • 1110xxxx 10xxxxxx 10xxxxxx — три байта, для кодовых точек до 65 535, где находятся японская кана и распространённые кандзи, корейский хангыль и знак евро. € — это 11100010 10000010 10101100.
  • 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx — четыре байта, для любой кодовой точки дальше, а там находится большинство эмодзи.

Первый байт, который начинается с двух, трёх или четырёх единиц, говорит, сколько байтов у его символа, а каждый байт, продолжающий символ, начинается с 10, так что ни один байт из середины символа нельзя принять за начало символа. Уберите из двух байтов א маркеры, 110 и 10, и оставшиеся одиннадцать бит, 10111010000, — это её кодовая точка, U+05D0, в двоичном виде. Если выбрать «Шестнадцатеричная», те же два байта читаются как D7 90, и схема свёрнута в цифры; в двоичном коде она стоит в первых битах каждого байта.

Четыре байта на один эмодзи

😀 — это U+1F600, далеко за 65 535, поэтому UTF-8 записывает его четырьмя байтами: 11110000 10011111 10011000 10000000. Первый начинается с четырёх единиц, так что он открывает символ из четырёх байтов, а каждый из трёх следующих начинается с 10. Его кодовая точка занимает семнадцать двоичных цифр, 11111011000000000, на одну больше тех шестнадцати, на которые хватает места в трёхбайтовом символе; в четырёхбайтовой схеме места хватает на двадцать одну.

Эмодзи, который выглядит как один знак, может состоять из нескольких кодовых точек, и каждая из них записывается полностью. Машущая рука с оттенком кожи — это две кодовые точки и восемь байтов. Семья из четырёх человек — это семь кодовых точек, четыре человека и три невидимых соединителя между ними, и двадцать пять байтов. Вставьте такой эмодзи на страницу и посчитайте группы.

Почему другой конвертер печатает для א одиннадцать цифр

Конвертер, который печатает для א одиннадцать цифр, 10111010000, записал не её байты. Он записал число, которое Unicode присваивает этой букве, её кодовую точку U+05D0, то есть 1488, в виде одного двоичного числа, а это число не является байтом ни в каком файле и ни в какой сети. Сообщение, записанное таким способом, может прочитать обратно только инструмент, который исходит из того же допущения.

Оба ответа ближе, чем кажется. Одиннадцать цифр — это ровно те биты, которые UTF-8 распределяет по своим двум байтам, если убрать маркеры, как показано выше, так что оба конвертера записывают одно и то же число, и только один из них записывает байты, в которых оно хранится. На символе ASCII они совпадают, если не считать ведущих нулей, поэтому для простого английского текста они дают один и тот же ответ, а почти во всём остальном расходятся.

Эта страница тоже даёт такой ответ — как единицу, которую выбираете вы, а не как допущение, которое делает она: выберите «Кодовые точки», и א запишется как 10111010000 и так же прочитается обратно. Если, когда выбран UTF-8, вставить сообщение, которое конвертер кодовых точек записал на иврите, русском или японском, группы окажутся слишком широкими для байтов; страница не угадывает, а говорит, что группы похожи на кодовые точки, и предлагает кнопку «Переключить на кодовые точки». Конвертер, который работает по одной единице кода UTF-16 за раз, как это делает charCodeAt в JavaScript, записывает 😀 как два шестнадцатизначных числа — половинки суррогатной пары, в виде которой его хранит UTF-16, а единица «Кодовые точки» читает эту пару обратно как один эмодзи.

Чтение двоичного кода обратно как текста

Чтобы превратить двоичный код обратно в текст, переключите направление на «Двоичный код в текст» и введите или вставьте цифры, и в выводе окажется текст, который из них складывается. Кнопка «Использовать как ввод» делает это одним щелчком: переносит вывод во ввод и меняет направление, и это самый быстрый способ проверить преобразование туда и обратно. Всё перечисленное ниже читается как одни и те же байты:

  • Пробельные символы любого вида, включая переводы строк, а также запятые, точки с запятой, двоеточия или дефисы между байтами.
  • Отсутствие разделителей вообще — там, где цифры делятся на целые байты по восемь, а именно так их записывает вариант «Слитно» в поле «Стиль».
  • Группы из семи цифр или меньше — так выглядит символ ASCII с отброшенным ведущим нулём: 1001000 1101001 читается как Hi.
  • 0b перед байтом, в любом регистре, и одна пара квадратных, фигурных или круглых скобок или кавычек вокруг всего.

Но страница не угадывает. Любой другой символ или группа длиннее восьми цифр, которая не делится на целые байты, останавливает чтение, и страница сообщает об этом, называя строку и столбец этого места, а ниже показывает вашу собственную строку с отмеченным местом. В длинном сообщении это разница между опечаткой, которую можно найти, и текстом, который тихо оказывается неверным.

Двоичный код, который без труда читается как байты, но не является текстом в UTF-8, показывается, а не отклоняется. Сообщение, оборванное посреди символа, возвращается с повреждённой последовательностью, показанной как U+FFFD, символ замены, а замечание под выводом говорит, сколько таких последовательностей и где начинается первая: байт, цифры, которые вы вставили для него, и их строку и столбец.

Двоичный код для текста и двоичный код для числа

Введите здесь 5, и ответом будет 00110101, а не 101. Страница записывает символ 5, которому ASCII присваивает номер 53, потому что цифры текста — это байты, в которых он хранится; 101 — это число пять, записанное в двоичной системе, а это другой вопрос с другим ответом. То же с 255: набранное здесь, это три символа и три байта, тогда как число 255 — это один байт, 11111111.

Если у вас число, а не текст, — например, результат подсчёта, содержимое регистра процессора или значение, которое вывела программа, — его стоит отнести в Конвертер систем счисления: он переводит само значение между двоичной, восьмеричной, десятичной, шестнадцатеричной системами и другими основаниями, а при фиксированной ширине записывает отрицательное значение в дополнительном коде и показывает каждый бит как бит, который можно щёлкнуть, чтобы инвертировать. Эта страница начинает с символов текста; та — с числа.

Частые вопросы

Как записать своё имя в двоичном коде?
Введите его в поле ввода, и оно выйдет по байту за раз — восемь цифр на байт и пробел между байтами. Ada, например, — это 01000001 01100100 01100001. Буква с диакритикой или буква из другого алфавита занимает два байта или больше, а пробел между двумя именами — это отдельный байт, 00100000.
Сколько бит занимает один символ?
В UTF-8 — восемь для буквы, цифры или знака препинания из ASCII, шестнадцать для буквы с диакритикой или для буквы кириллицы, еврейского или арабского алфавита, двадцать четыре для японской каны, распространённых кандзи, корейского хангыля и знака евро и тридцать два для большинства эмодзи. То, что вы видите как один знак, может внутри состоять из нескольких кодовых точек, и каждая из них занимает собственные биты.
Можно ли вставить двоичный код без пробелов между байтами?
Да, там, где цифры делятся на целые байты: шестнадцать цифр — это два байта, двадцать четыре — три. Группу длиннее восьми цифр, длина которой не кратна восьми, нельзя разделить, не угадывая, какой байт потерял цифру, поэтому она отклоняется с указанием строки и столбца, а не читается неправильно.
Почему мой текст возвращается со знаком вопроса в ромбе?
Этот знак — U+FFFD, символ замены, который страница ставит везде, где байты не являются текстом в UTF-8: чаще всего потерялся байт и символ оборвался или байты вообще никогда не были UTF-8. Вместо того чтобы отклонить всё сообщение, страница показывает так каждую повреждённую последовательность и пишет под выводом, сколько их и где начинается первая, чтобы вы могли найти повреждение во вставленном.
Почему другой конвертер даёт мне другой двоичный код?
Скорее всего, он записывает кодовую точку каждого символа, а не его байты. Оба конвертера совпадают на ASCII, если не считать ведущих нулей, и расходятся за его пределами: א здесь — 11010111 10010000, а там — 10111010000. Выберите «Кодовые точки», чтобы получить ответ того конвертера или прочитать обратно сообщение, которое он записал.
Почему 5 здесь не 101?
Потому что цифра 5, набранная в поле, — это символ, и страница записывает байт, в котором он хранится, 00110101. Число пять в двоичной системе — 101; для числа, а не текста, используйте Конвертер систем счисления.
Отправляется ли мой текст на сервер?
Нет. Оба направления работают целиком в вашем браузере, поэтому текст, который вы вводите, и двоичный код, который вы вставляете, никогда не покидают ваше устройство.

Похожие инструменты

  • Конвертер систем счисления

    Введите здесь 5, и вы получите байт, в котором хранится символ 5: 00110101. Та страница — для числа, а не для текста: там переводится само значение, так что пять записывается как 101.

  • Конвертер текста в шестнадцатеричный код

    В шестнадцатеричном коде байт записывается двумя цифрами, а в двоичном — восемью: Hi здесь 01001000 01101001, а там 48 69. Так байты показывает дамп и так их пишут в коде. Шестнадцатеричный код есть и на этой странице; та открывается на нём.

  • Base64

    Кодирует и декодирует Base64 — полная поддержка UTF-8.

  • Кодировщик / декодировщик URL

    Процентное кодирование значения или целого URL — и обратно.