Как перевести Base64 в десятичные числа
- Вставьте Base64 в поле Ввод · Base64. Пробелы, переносы строк, URL-safe символы и отсутствующее дополнение не мешают.
- Значения байтов появятся в поле Результат · Десятичные байты.
- Выберите Разделитель под результатом: «Пробел»,
,,,или «Новая строка». - Нажмите Скопировать результат или Скачать, чтобы сохранить список. Переключатель Десятичные байты → Base64 или страница десятичные числа в Base64 выполняют обратное преобразование.
Примеры
| Base64 | Десятичные байты | Что это |
|---|---|---|
SGkh | 72 105 33 | текст Hi! |
SGkh/w== | 72 105 33 255 | Hi! и ещё один байт 0xff |
AQA= | 1 0 | два байта, 256 как 16-битное число big-endian |
AAAA | 0 0 0 | три нулевых байта |
//// | 255 255 255 | три байта, у которых установлены все биты |
fwAAAQ== | 127 0 0 1 | IPv4-адрес 127.0.0.1 в виде четырёх сырых байтов |
Последняя строка показывает удобное применение: двоичные форматы хранят IPv4-адреса четырьмя байтами, а десятичный список совпадает с привычной записью адреса, только без точек.
Значения байтов или одно большое число
Этот конвертер выводит байты и не читает всё значение Base64 как одно целое число: у такой задачи другой ответ. Два байта 1 0 дают 256, если читать их как число big-endian, и 1, если как little-endian. Какой вариант правильный, зависит от формата, в котором созданы данные, поэтому такое преобразование лучше делать в коде, где порядок байтов указывается явно:
import base64
data = base64.b64decode("AQA=")
list(data) # [1, 0]
int.from_bytes(data, "big") # 256
int.from_bytes(data, "little") # 1
То же касается Base64 с 32-битным счётчиком, меткой времени или большим ID: десятичный список даёт байты, а число дают int.from_bytes или DataView в JavaScript.
Где используются десятичные списки байтов
- JSON. Некоторые сериализаторы записывают двоичные данные как массив чисел.
JSON.stringify(Buffer.from("Hi!"))в Node даёт{"type":"Buffer","data":[72,105,33]}. С разделителем,и скобками получается та же структура. - Python и таблицы.
list(b)в Python печатает десятичные значения, а столбец чисел (разделитель «Новая строка») вставляется прямо в электронную таблицу. - Микроконтроллеры и мониторы последовательного порта. Код для Arduino и многие терминалы показывают байты в десятичном виде. Чтобы получить типизированное объявление массива на C или другом языке, используйте Base64 в массив байтов: он выводит литерал целиком.
Если байты нужно читать глазами, а не вставлять куда-то, hex обычно нагляднее, потому что каждый байт занимает ровно два символа: попробуйте Base64 в hex.
Base64 в десятичные числа в коде
import base64
list(base64.b64decode("SGkh/w==")) # [72, 105, 33, 255]
Array.from(Buffer.from("SGkh/w==", "base64")).join(", "); // '72, 105, 33, 255'
В браузере без Buffer те же числа даёт Array.from(atob(s), c => c.charCodeAt(0)). Декодирование подробнее разобрано на страницах Python и JavaScript.
Вопросы и ответы
Что значит «десятичные» в переводе Base64 в десятичные числа?
Каждый декодированный байт записывается обычным числом в десятичной системе. Байт хранит значения от 0 до 255, поэтому получается список чисел из этого диапазона, по одному на байт.
Как перевести Base64 в одно число, а не в список?
Прочитайте байты как одно целое число в коде. В Python это int.from_bytes(base64.b64decode(s), "big"); для AQA= получится 256, а эта страница выведет байты 1 0.
Как получить из Base64 JSON-массив байтов?
Выберите в поле Разделитель значение , и оберните результат в квадратные скобки. SGkh превратится в [72, 105, 33], а это корректный JSON-массив.
Почему Java печатает -1 там, где эта страница показывает 255?
Тип byte в Java знаковый, поэтому байты от 128 до 255 печатаются как числа от −128 до −1. Биты те же самые. Чтобы получить значение 0–255, как здесь, используйте в Java b & 0xff.