如何在Python中将长整型写为二进制?
在Python中,长整型的数字可以非常大,没有限制。我想把一个16字节(128位)的整数写入一个文件。标准库里的struct
只支持到8字节的整数,而array
也有同样的限制。有没有办法可以做到这一点,而不需要对每个整数进行掩码和位移操作呢?
这里再补充一下:我写入的文件是要被非Python程序读取的,所以不能用pickle。所有的128位都要用上。
9 个回答
3
PyPi bitarray模块和内置的bin()
函数结合起来,听起来是一个简单又灵活的解决方案。
bytes = bitarray(bin(my_long)[2:]).tobytes()
你可以通过多写几行代码来控制字节序。你需要自己评估一下效率如何。
9
我觉得对于无符号整数(不考虑字节序),像下面这样的代码
import binascii
def binify(x):
h = hex(x)[2:].rstrip('L')
return binascii.unhexlify('0'*(32-len(h))+h)
>>> for i in 0, 1, 2**128-1:
... print i, repr(binify(i))
...
0 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
1 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'
340282366920938463463374607431768211455 '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff'
在技术上可能满足不使用Python特定输出、不使用显式掩码,并且(我假设)不使用任何非标准模块的要求。不过,这样写并不是特别优雅。