Python: как конвертировать из двоичного файла в базовый 64 и обратно?
допустим, у меня есть двоичное значение:
0b100
и хотите преобразовать его в base64
делаешь base64.b64decode(0b100)
мне подсказывает, что он ожидает строку, а не int.... я не хочу работать со струнами.
Итак, может ли кто-нибудь указать мне в правильном направлении для преобразования двоичных чисел в числа base64? спасибо!
=D
3 ответов
в зависимости от того, как вы представляете стоимостью 0b100
>>> import struct
>>> val = 0b100
>>> print struct.pack('I', val).encode('base64')
BAAAAA==
это превратит ваше значение в 4-байтовое целое число в native endianness и закодирует это значение в base64. Вам нужно указать ширину ваших данных в base64 действительно для представления двоичных данных в печатные символы.
обычно вы можете кодировать данные как строку байтов через функции struct, а затем кодировать в base64. Убедитесь, что вы используете тот же формат данных и endianess, когда декодирование.
двоичные литералы - это обычные целые числа python.
>>> 0b100
<<< 4
>>> 4
<<< 4
просто преобразуйте в строку и base64 кодируйте ее (давая вам строку, которая является представлением base64 '4'). В этом подходе нет ничего плохого, он прост и без потерь.
>>> s = str(0b100).encode('base64')
>>> int(s.decode('base64'))
<<< 4
Если вы хотите, вы можете использовать bin для преобразования int в двоичную строку:
>>> bin(int(s.decode('base64')))
<<< '0b100'
насколько велико ваше двоичное значение? Если он может поместиться в один байт, то вы можете использовать chr
.
>>> base64.b64encode(chr(255))
'/w=='
в противном случае, я думаю, вам придется получить отдельные байты из него с некоторой экспоненциальной математикой и расположить их в big-endian или little-endian, вызывая chr
несколько раз. (Edit: ответ Яна с struct
модуль легче :)
кроме того, я должен отметить, что двоичный синтаксис integer-это просто синтаксис. Интерпретатор видит в этом всего лишь еще одно целое число.
>>> (0b0).__class__
<type 'int'>