如何在 Python 3 中将任意长度(正)整数转换为字节对象?最重要的字节应该放在第一位,这样它基本上是一个基本的 256 编码。
对于固定长度值(最多 unsigned long long),您可以使用struct 模块,但似乎没有库支持 Python 中的大数转换。
预期成绩:
>>> intToBytes(5)
b'\x05'
>>> intToBytes(256)
b'\x01\x00'
>>> intToBytes(6444498374093663777)
b'You won!'
如何在 Python 3 中将任意长度(正)整数转换为字节对象?最重要的字节应该放在第一位,这样它基本上是一个基本的 256 编码。
对于固定长度值(最多 unsigned long long),您可以使用struct 模块,但似乎没有库支持 Python 中的大数转换。
预期成绩:
>>> intToBytes(5)
b'\x05'
>>> intToBytes(256)
b'\x01\x00'
>>> intToBytes(6444498374093663777)
b'You won!'
def intToBytes(num):
if num == 0:
return b""
else:
return intToBytes(num//256) + bytes([num%256])
或作为单线
intToBytes = lambda x: b"" if x==0 else intToBytes(x//256) + bytes([x%256])
连续连接常量字节对象并不是非常有效,但会使代码更短且更具可读性。
作为替代方案,您可以使用
intToBytes = lambda x: binascii.unhexlify(hex(x)[2:])
但是,它具有binascii依赖性。
从 Python 3.2 开始,您可以使用int.to_bytes,它也支持 little-endian 字节顺序。