Как перевести Base64 в двоичный код
- Вставьте Base64 в поле Ввод · Base64. Переносы строк, пробелы, префикс
data:, URL-safe-и_и отсутствующее дополнение допускаются. - Каждый декодированный байт появится в виде 8 бит в поле Результат · Двоичный.
- Выберите Разделитель под результатом: «Пробел» (по умолчанию), «Нет»,
,,,или «Новая строка». - Нажмите Скопировать результат или Скачать, чтобы сохранить биты. Сохранить байты вместо этого сохраняет декодированные данные файлом, расширение берётся по содержимому.
Переключатель Двоичный → Base64 или страница двоичный код в Base64 переводят в обратную сторону.
Как символы Base64 превращаются в биты
Каждый символ Base64 обозначает 6 бит: свою позицию в алфавите, от A = 0 до / = 63. Четыре символа дают 24 бита, которые декодер перегруппировывает в три 8-битных байта. Возьмём SGkh:
| Символ | S | G | k | h |
|---|---|---|---|---|
| Значение | 18 | 6 | 36 | 33 |
| 6 бит | 010010 | 000110 | 100100 | 100001 |
Вместе это 010010000110100100100001. Режем на байты:
| Байт | 01001000 | 01101001 | 00100001 |
|---|---|---|---|
| Десятичное | 72 | 105 | 33 |
| Текст | H | i | ! |
Итак, SGkh декодируется в Hi!, а в двоичном виде результат выглядит как 01001000 01101001 00100001. Границы символов и байтов совпадают только раз в 24 бита, поэтому один неверный символ Base64 может испортить два соседних байта. Пошаговое объяснение разбирает тот же процесс со стороны кодировщика.
Дополнение и оставшиеся биты
Если длина данных не кратна 3 байтам, последняя группа неполная. В Hi 16 бит, для которых нужно три символа Base64 (18 бит). Лишние 2 бита заполняются нулями, а = дополняет группу до четырёх символов:
| Base64 | Сколько бит несёт | Байты на выходе |
|---|---|---|
SGkh | 24 | 01001000 01101001 00100001 |
SGk= | 18, из них 2 заполняющих | 01001000 01101001 |
SA== | 12, из них 4 заполняющих | 01001000 |
Заполняющие биты в результат не попадают. Зачем вообще нужен =, рассказано на странице о дополнении.
Когда полезно видеть биты
- Флаги и битовые поля. Протоколы и заголовки файлов часто упаковывают несколько значений «да/нет» в один байт. В двоичном виде их можно прочитать сразу, не переводя hex-цифры в уме.
- Сравнение двух значений. Декодируйте оба и сравните построчно, выбрав в поле Разделитель «Новая строка»; один перевёрнутый бит легко заметить.
- Обучение и головоломки. Когда 8-битные байты видны рядом с 6-битными группами, проще всего понять, откуда берутся лишние 33% размера.
Для всего, что длиннее нескольких десятков байтов, удобнее hex: Base64 в hex показывает те же байты вчетверо компактнее. Двоичный вид тратит 8 символов на байт плюс разделитель, так что миллион символов Base64 (750 000 байт) превращается примерно в 6,75 миллиона символов. Поле результата показывает первые 2 миллиона; Скопировать результат и Скачать всегда дают результат целиком.
Base64 в двоичный код в коде
import base64
" ".join(f"{b:08b}" for b in base64.b64decode("SGkh"))
# '01001000 01101001 00100001'
Array.from(Buffer.from("SGkh", "base64"), b => b.toString(2).padStart(8, "0")).join(" ");
// '01001000 01101001 00100001'
Чтобы вместо этого записать декодированные байты в двоичный файл, используйте open("out.bin", "wb").write(base64.b64decode(s)) в Python или fs.writeFileSync("out.bin", Buffer.from(s, "base64")) в Node. Полные примеры с файлами есть на страницах Python и Node.js.
Вопросы и ответы
Перевод Base64 в двоичный вид отличается от декодирования?
Декодирование то же самое, отличается только отображение: эта страница записывает байты нулями и единицами. Если вам нужны байты в виде файла (часто под «бинарником» имеют в виду именно его), используйте Base64 в файл или кнопку Сохранить байты здесь.
Почему 8 цифр на байт, если Base64 использует 6 бит на символ?
В результате показаны байты, а в байте 8 бит. Base64 режет тот же поток битов на куски по 6, поэтому 3 байта (24 бита) всегда соответствуют 4 символам.
Как получить биты без пробелов?
Выберите в поле Разделитель значение «Нет». Тогда SGk= даст одну строку 0100100001101001.
Что происходит с битами дополнения?
Они отбрасываются. В SGk= последний символ несёт 6 бит, но к данным относятся только 4; остальные 2 бита заполнены нулями, и декодер их выбрасывает.