将n-byte int转换为python3中的字节

Pet*_*ter 7 python-3.x

我想将一个32字节(虽然我可能需要其他长度)整数转换为python中的一个字节对象.有一个干净,简单的方法吗?

Sil*_*Net 8

从3.2开始,你需要 to_bytes(length,byteorder [,signed]).在这种情况下, someidentifier .to_bytes(4,'big')应该为您提供所需的字节字符串.


Len*_*bro 3

我猜你需要一个 32 位整数和大尾数法来启动:

>>> from ctypes import c_uint32
>>> l = c_uint32(0x12345678)
>>> bytes(l)
b'xV4\x12'
Run Code Online (Sandbox Code Playgroud)

还有 c_uint8、c_uint16 和 c_uint64。对于较长的整数,您需要使用 divmod(x, 256) 手动制作。

>>> def bytify(v):
...   v, r = divmod(v, 256)
...   yield r
...   if v == 0:
...      raise StopIteration
...   for r in bytify(v):
...     yield r
... 
>>> [x for x in bytify(0x12345678)]
[120, 86, 52, 18]
>>> bytes(bytify(0x12345678))
b'xV4\x12
>>> bytes(bytify(0x123456789098765432101234567890987654321))
b'!Ce\x87\t\x89gE#\x01!Ce\x87\t\x89gE#\x01'
Run Code Online (Sandbox Code Playgroud)

  • ctypes 答案更快,我仍然认为这是当时最好的答案(当然现在你可以切换到 3.2 并使用 to_bytes()) (2认同)