0

このライブラリを使用し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 ビット マシンであるという事実はどうでしょうか。

4

1 に答える 1

1

to01そのサイズの bitarray でメソッドを実行するには、マシンにメモリがありません。文字列は (少なくとも) 1 桁あたり 1 バイトを使用し、2**32 桁を超えています。swappign やメモリ不足エラーが発生していないため、bitarray で何らかのバグに遭遇した可能性があります -- しかし...一歩下がってください!

いったいなぜ、「0」と「1」の 40 億桁の文字列が好きなのですか? マトリックスをテーマにしたレーシングトラックを自分でプリント??

数十万桁でも 0s と 1s に変換する必要がある場合、パターンなどを探す場合は、インタラクティブに実行して、一度に数バイトずつ変換する方がよいでしょう。

于 2012-10-17T15:24:52.607 に答える