1

プログラムがファイルを開くときはいつでも、ファイルをバイナリ データとして認識します。それを上位の解釈言語、つまり 8 進数、16 進数、ASCII などに変換します。この場合、左側のペインには 16 進数が表示され、右側のペインには ansi (Windows 7 では CP1252 のはずです) が表示されます。以下の 3 つの図は、元のビューと目的の変更を示しています。3 つ目は、コードによって行われた実際の変更です。

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

with open(tar,'rb') as f:
data = binascii.hexlify(f.read(160))
if old in data:
    print 'found!'
    data = data.replace(old, new)
else:
    print 'not found'
with open(tar+'new', 'wb') as fo:
    binascii.unhexlify(data)
    fo.write(data)

明らかに、書き込み配信方法を正しくターゲットにしていません。

4

1 に答える 1

3

ヒント: 次の 2 つの行の違いは何ですか。

data = binascii.hexlify(f.read(160))

binascii.unhexlify(data)

Python では、文字列オブジェクトは不変です。文字列は変更されないため、名前が変更されるdata文字列を呼び出すことができるものは何もありません。代わりに、新しい文字列を返します。これが、最初のステートメントがそもそも機能する理由です。結果の新しい文字列が必要な場合は、それがコードで発生するように指定する必要があります-直接:databinascii.unhexlify.write

fo.write(binascii.unhexlify(data))

またはそれを最初に割り当てることによってdata

于 2014-02-03T10:06:14.517 に答える