1. ホーム
  2. python

[解決済み] Pythonでバイナリファイルから整数を読み込む

2023-03-28 11:33:03

質問

私は BMP ファイルをPythonで読み込もうとしています。最初の2バイトは はBMPファームを示しています。次の4バイトはファイルサイズです。私が実行するとき。

fin = open("hi.bmp", "rb")
firm = fin.read(2)  
file_size = int(fin.read(4))  

得る。

ValueError: invalid literal for int() with base 10: 'F#x13'.

私がしたいことは、これらの4バイトを整数として読むことです。しかし、Pythonはそれらを文字として読み、整数に変換することができない文字列を返しているようです。どうしたら正しくできるのでしょうか?

どのように解決するのですか?

この read メソッドはバイト列を文字列として返します。文字列のバイト列からバイナリデータに変換するには、組み込みの struct モジュールを使用します。 http://docs.python.org/library/struct.html .

import struct

print(struct.unpack('i', fin.read(4)))

なお unpack は常にタプルを返すので struct.unpack('i', fin.read(4))[0] は目的の整数値を返します。

おそらくフォーマット文字列 '<i' (< はリトルエンディアンバイトオーダーと標準サイズとアライメントを示す修飾子です - デフォルトはプラットフォームのバイトオーダー、サイズ、アライメントを使用します)。BMP フォーマットの仕様によると、バイトは Intel/little-endian バイト順で記述されるはずです。