Кодировать строковое представление целого числа в 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=='