3

私はPythonを初めて使用し、バイト0x00-0xffをファイルに出力するスクリプトを作成しようとしています。

これは私が現在見ているコードです

import sys

filename="binarywriter.txt"
openmode="wb"
charset="utf8"

file=open(filename, openmode)
for x in range(16,256):
    s="0x%.2x=\\x" %x
    s+=hex(x)[2:]
    d=bytes(s, charset).decode("unicode_escape")
    file.write(d.encode(charset))
    file.write("\r\n".encode(charset))
file.close()
sys.stdin.readline()

問題は、Pythonスクリプトがバイト0x7f(ascii)まですべてをうまく書き込み、その後(0x80)、2バイトのutf8エンコーディングですべての出力を変換することです。これを避けて、次のようなものだけを書くことが重要です。

...
0x7f
0x80
0x81
...

だから私は8ビットエンコーディングのようなものが必要ですが、1時間の検索の後、私にとって何の結果もありませんでした

16未満の数値がデコードできない単一の16進値を返すという小さな問題もありますが、私はこれに対する解決策を見つけるかもしれません

4

2 に答える 2

3

Latin-1( ISO_8859-1とも呼ばれます)エンコーディングを使用できます。

charset="iso-8859-1"

すべての文字がファイル内で1バイトしか必要としないことの証明については、スクリーンショットを参照してください。 ファイルを表示しているhexeditorのスクリーンショット

于 2012-10-04T13:58:03.187 に答える
1

0x00から0xFFを表す長さ256バイトのファイルを探している場合は、次を使用できます。

with open('binary.dat', 'wb') as fout:
    fout.write(bytes(range(256)))
于 2012-10-04T13:51:51.550 に答える