Wave ライブラリを使用して Wavefile からバイナリ データを読み込もうとしています。データは '\x0f\x06\x0a...' の形式の文字列リテラルとして読み取られ、報告されます。16 進数を整数に変換したいと思います (基数 10)。私が抱えている問題は、これらの文字列が実際には 16 進数として扱われておらず、Unicode 文字のように扱われていることです。
import wave
import struct
path="C:\\directory\\file.wav"
file=wave.open(path,'r')
data=file.readframes(10)
print repr(data)
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
int_dat=struct.unpack('10i',data)
次のようなものを試したときに表示されるエラー
struct.unpack('i','\xff')
struct.unpack は長さ 4 の文字列を期待していて、長さ 1 の文字列しか受け取っていないということです。なぜそうなっているのかは明らかですが、「\xff」を解凍できる unpack のフォーマット オプションはありますか?
struct.unpack('i','0xff')
明らかにうまく動作します。同様に
struct.unpack('i',r'\xff')
動作します。
または、「\xff\x01\x63...」のような文字列を生の文字列に変換する便利な方法はありますか (ただし、「\x」はエスケープ文字 (正しい用語ですか?) であり、文字ではありません)、または '0xff0x010x63' の形式にします。