如何在Python 3中将任意长度(正)整数转换为 bytes 对象?最重要的字节应该是第一个,因此它基本上是一个基本的256编码。
对于固定长度值(最多为无符号long long),您可以使用struct module,但似乎没有库支持Python中的大数字转换。
预期结果:
>>> intToBytes(5)
b'\x05'
>>> intToBytes(256)
b'\x01\x00'
>>> intToBytes(6444498374093663777)
b'You won!'
答案 0 :(得分:2)
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字节顺序。