我正在尝试将一个整数编码为base64,我的做法是:
foo = 1
base64.b64encode(bytes(foo))
预期输出:'MQ=='
给出的输出:b'AA=='
我做错了什么?
编辑:在Python 2.7.2中可以正常工作。
>>> bytes(10)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> "1".encode()
b'1'
现在,base64将给你b'MQ=='
:
>>> import base64
>>> base64.b64encode("1".encode())
b'MQ=='
试试这个:
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'
。AQ==
而不是 MQ==
。 - fj123xMQ==
。 - Robᵩbase64.b64encode(i.to_bytes(ceil(i.bit_length()/8),'big'))
翻译:该代码将整数i转换为字节数组,然后使用Base64编码对其进行编码,并返回编码结果。其中,ceil(i.bit_length()/8)用于计算字节数组的长度,'big'指定了字节序。 - Erik Aronestybase64.b64encode(i.to_bytes((i.bit_length()+8)//8,'big',signed=True))
来正确地将有符号数转换为Base64编码。使用int.from_bytes(base64.b64decode(z),'big',signed=True)
来解码有符号数。(我改用了+8...//8而不是ceil...这样可以少用一个库,并且它会给你需要的额外位数以表示符号) - Erik Aronesty
b'AA=='
。问题不在于b64encode
,而是bytes()
。在Python3中,bytes(1)
返回b'00'
。 - Robᵩ