このライブラリを使用しbitarray
てビット変換を管理し、Python でバイナリ ファイルを作成しています。ファイルに書き込む前の bitarray.to01() の長さは です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()
とsys.maxint
、次のようになります。
In [1]: import platform, sys
In [5]: platform.architecture(), sys.maxint
Out[5]: (('64bit', ''), 9223372036854775807)
したがって、これは約 2^63 です。2 ^ 32で切り捨てられるのはなぜですか? 私は4GBのRAMを持っています。2^32*1.16415e-10*8 (文字列に変換しているため) ~= 4GB が得られます... しかし、これが 64 ビット マシンであるという事実はどうでしょうか。