我使用该库bitarray
来管理我的位转换并用 Python 编写二进制文件。写入文件之前的 bitarray.to01() 是 length 4807100171
。出于某种原因,我无法理解,在从文件 ( b.fromfile(file)
) 获取位然后用 转换为 0 和1 的字符串之后,to01()
我的字符串 () 中不仅有 0 和 1,\x00
然后,当我使用它时,我得到这个错误:
ValueError: invalid literal for int() with base 2: '0000000000000000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
我想知道来自文件的字符串是否有大小限制或某些问题。如果是这样,我还没有找到任何关于它的东西......
编辑:
这是重现问题的一种方法:
import re
from bitarray import bitarray
b = bitarray(4807100171)
b.setall(False)
if re.match("^[\d]+$", b.to01()):
print "there is only digits in this string."
else:
print "there is not only digits in this string."
** 编辑#2:
但是,如果我使用platform.architecture()
and检查我的机器sys.maxint
,我会得到:
In [1]: import platform, sys
In [5]: platform.architecture(), sys.maxint
Out[5]: (('64bit', ''), 9223372036854775807)
所以,这大约是 2^63。为什么它会在 2^32 处截断?我有 4GB 的内存。我得到了 2^32*1.16415e-10*8 (因为我将它转换为字符串)~= 4GB ......但是这是一台 64 位机器的事实呢?