Кодировать строковое представление целого числа в base64 в Python 3
Я пытаюсь закодировать int в base64, я делаю это:
foo = 1
base64.b64encode(bytes(foo))
ожидаемый результат: 'MQ=='
заданный вывод: b'AA=='
что я делаю не так?
Редактировать: в Python 2.7.2 работает правильно
Ответы
Ответ 1
Попробуйте следующее:
foo = 1
base64.b64encode(bytes([foo]))
или
foo = 1
base64.b64encode(bytes(str(foo), 'ascii'))
# Or, roughly equivalently:
base64.b64encode(str(foo).encode('ascii'))
Первый пример кодирует 1-байтовое целое число 1
. Второй пример кодирует 1-байтовую строку символов '1'
.
Ответ 2
Если вы инициализируете байты (N) целым числом N, он даст вам байты длины N, инициализированные нулевыми байтами:
>>> bytes(10)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
то, что вам нужно, это строка "1"; поэтому закодируйте его в байтах с помощью:
>>> "1".encode()
b'1'
теперь base64 даст вам b'MQ=='
:
>>> import base64
>>> base64.b64encode("1".encode())
b'MQ=='