ちょうどで4つのバイトを読み取るために読んでの「量」パラメータを使用する必要があります私の例では
current_tmp = []
for byte in data:
current_tmp.append(int(byte))
if (len(current_tmp) == 4):
print (current_tmp)
# but current_tmp is an array not a single int
current_tmp = []
、代わりに[132, 4, 240, 215]
を有するので:
私のオリジナルのアイデアは以下のとおりです。あなたがいない場合はUSI
with open('MEM_10001000_0000B000.mem', 'br') as f:
data = f.read(4)
while data:
number = int.from_bytes(data, "big")
...
data = f.read(4)
:時間は、とPythonの3 int
の「from_bytes」コンストラクタは、それが軌道に乗るにしますint
はfrom_bytes
方法を特徴としませんが、何らかの理由でまだPythonの3 ngを - そして、あなたは構造体モジュールを使用するために頼ることができます:
import struct
...
number = struct.unpack(">i", data)[0]
...
しかし、これらの方法はカップルのinterationsための優れている、とのために遅い得ることができます、
import array, os
numbers = array.array("i")
with open('MEM_10001000_0000B000.mem', 'br') as f:
numbers.fromfile(f, os.stat('MEM_10001000_0000B000.mem').st_size // numbers.itemsize)
numbers.byteswap()
あなたは、配列を持っていたら:大きなファイルは - あなたが使用する必要がありますどのような可能性が高い - Pythonはあなたは、単にのOpenFileから直接メモリに4バイトの整数の配列を埋めるための方法を提供しています
のようなものでxorすることができます
from functools import reduce #not needed in Python2.7
result = reduce(lambda result, input: result^input, numbers, key)
from functools import reduce #not needed in Python2.7
result = reduce(lambda result, input: result^input, numbers, key)
あなたのファイルのすべての数字を4バイト、ビッグエンディアン、符号付き整数として読み込みます。numbers
シーケンスが得られます。
ファイルが4バイトの倍数でない場合、最初の2つの方法で調整が必要な場合があります。while
の条件で十分です。
OPは '[132、4、240、215]'を '0x8404f0d7'に変換したい、つまりビッグエンディアンが必要です。 –
ファイルのサイズが4の倍数でない場合、最後のバイトにも注意してください... –
ありがとう – jsbueno