Python 3 to_bytes是否被反向移植到python 2.7?

时间:2013-04-15 18:45:33

标签: python

这是我追求的功能: -

http://docs.python.org/3/library/stdtypes.html#int.to_bytes

我需要大的字节顺序支持。

4 个答案:

答案 0 :(得分:14)

根据@nneonneo的回答,这是一个模拟to_bytes API的函数:

def to_bytes(n, length, endianess='big'):
    h = '%x' % n
    s = ('0'*(len(h) % 2) + h).zfill(length*2).decode('hex')
    return s if endianess == 'big' else s[::-1]

答案 1 :(得分:11)

为了回答您的原始问题,to_bytes对象的int方法没有从Python 3反向移植到Python 2.7。它被考虑但最终被拒绝。请参阅讨论here

答案 2 :(得分:7)

要在Python 2.x中打包任意长度的long,您可以使用以下命令:

>>> n = 123456789012345678901234567890L
>>> h = '%x' % n
>>> s = ('0'*(len(h) % 2) + h).decode('hex')
>>> s
'\x01\x8e\xe9\x0f\xf6\xc3s\xe0\xeeN?\n\xd2'

以big-endian顺序输出数字;对于小端,反转字符串(s[::-1])。

答案 3 :(得分:3)

您可以改为使用struct.pack

>>> import struct
>>> struct.pack('>i', 123)
'\x00\x00\x00{'

它不会像int.to_bytes那样做任意长度,但我怀疑你是否需要它。