首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中将长整型写成二进制?

如何在Python中将长整型写成二进制?
EN

Stack Overflow用户
提问于 2011-01-12 23:13:38
回答 7查看 18K关注 0票数 8

在Python中,长整数具有无限的精度。我想写入一个16字节(128位)的整数到一个文件中。标准库中的struct仅支持最多8个字节的整数。array也有同样的限制。有没有办法在不屏蔽和移位每个整数的情况下做到这一点?

这里需要说明的是:我正在写入一个文件,该文件将从非Python程序中读入,因此pickle被删除。所有128位都被使用了。

EN

回答 7

Stack Overflow用户

发布于 2011-01-12 23:59:34

我认为对于无符号整数(忽略字节顺序),类似于

代码语言:javascript
复制
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的输出、不使用显式掩码以及(我假设)不使用任何非标准模块的要求。不过,并不是特别优雅。

票数 9
EN

Stack Overflow用户

发布于 2011-01-13 00:17:52

对于简单而灵活的解决方案,PyPi bitarray模块和内置的bin()函数似乎是一个很好的组合。

代码语言:javascript
复制
bytes = bitarray(bin(my_long)[2:]).tobytes()

可以通过多几行代码来控制字节顺序。你必须评估它的效率。

票数 3
EN

Stack Overflow用户

发布于 2011-01-12 23:25:33

这可能无法避免“掩码和移位每个整数”的要求。我不确定在Python长值的上下文中避免掩码和移位意味着什么。

字节数如下:

代码语言:javascript
复制
def bytes( long_int ):
    bytes = []
    while long_int != 0:
        b = long_int%256
        bytes.insert( 0, b )
        long_int //= 256
    return bytes

然后,您可以使用struct.pack( '16b', bytes )打包此字节列表

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4670350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档