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