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'>