0

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

对于固定长度值(最多 unsigned long long),您可以使用struct 模块,但似乎没有库支持 Python 中的大数转换。

预期成绩:

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

1 回答 1

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

于 2013-05-05T22:23:20.067 回答