2016-09-05 5 views
2

nバイトをバイナリファイルとして読み込み、各バイトをリストに格納します。しかし、そうすると、各バイトはintにキャストされます。バイトがリストコンストラクタによってint型にキャストされる

まずランダムファイルを作成します。

$ head -c 16 > random.file 

その後、私はそれを読み取ろう:

>>> with open('random.file', 'rb') as fp: 
...  l = list(fp.read(8)) 
...  print(fp.read(8)) 
... 
b'@\xc2\xdf\x9f\xbbv\xa1\x90' 
>>> l 
[79, 233, 19, 116, 252, 50, 248, 144] 
>>> type(l[0]) 
<class 'int'> 

だから私は予想されませんので、Pythonは自動的にキャストされているという事実が問題を引き起こしているが、私のバイトの値が255の上に行くことができないということを理解しますタイプ。

これは正常ですか?どうすればこれを避けることができますか?

+0

私はPythonが何かを変換しているとは思わない。インタプリタは単にバイト配列の小数値を表示しています –

+0

シングルバイトの 'bytes'オブジェクトのリストのポイントは何でしょうか?本当にそれが必要ですか?まれなユースケースなので、サポートされない可能性があります。 –

+1

期待される出力はどれくらいですか? –

答えて

1

あなたはバイトのリストにアクセスする任意の1バイトが1つだけint型の値です:あなたは長さ1バイトのリストで構成され、新しいリストを作成したい場合は

>>> b"foo"[0] 
102 

、あなた'LL

>>> c = b"foo" 
>>> l = [] 
>>> for i in range(0, len(c)): 
... l.append(c[i:i+1]) 
>>> l 
[b'f', b'o', b'o'] 

しかし、私は今、新しいリストの中に埋め込まれている単一の値を、アクセスすると、ちょうど、再び、戻ります、私はそれを行うためにどのような理由を参照してください本当にわからない:それ明示的に行う必要がありますint。

+0

あなたは正しいと思います。私のユースケースはファイル上にスライディングウインドウを持っていたので、右側に1バイトを追加し、ファイルを進めながら左に1バイトを削除しました。 – Spack

関連する問題