任意长度的整数到字节数组转换(最重要的字节优先)

时间:2013-05-05 22:23:20

标签: python-3.x

如何在Python 3中将任意长度(正)整数转换为 bytes 对象?最重要的字节应该是第一个,因此它基本上是一个基本的256编码。

对于固定长度值(最多为无符号long long),您可以使用struct module,但似乎没有库支持Python中的大数字转换。

预期结果:

>>> intToBytes(5)
b'\x05'
>>> intToBytes(256)
b'\x01\x00'
>>> intToBytes(6444498374093663777)
b'You won!'

1 个答案:

答案 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字节顺序。