17

我正在尝试将 int 编码为 base64,我正在这样做:

foo = 1
base64.b64encode(bytes(foo))

预期输出: 'MQ=='

给定输出: b'AA=='

我做错了什么?

编辑:在 Python 2.7.2 中正常工作

4

2 回答 2

13

如果您使用整数 N 初始化 bytes(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=='
于 2013-09-04T16:57:43.357 回答
5

尝试这个:

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'

于 2013-09-04T14:42:02.000 回答