8

这是我追求的功能: -

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

我需要大字节序支持。

4

4 回答 4

16

根据@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]
于 2013-12-27T01:51:13.803 回答
11

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

于 2013-04-15T18:57:16.947 回答
7

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

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

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

于 2013-04-15T18:54:43.877 回答
4

您可能可以struct.pack改用:

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

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

于 2013-04-15T18:51:09.450 回答