質問: "record.wav" # 保存ファイル名 print "Write down wav format: " + filename print u"type(data): " + str(type(data)) # list wavOut(filename) ``` 文字化けした出力の画像 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/aacb6867663ff23faa10bdd2fd068614.png) よろしくお願い致します。
回答: 提示コードの動作が確認できないためdataの内容がいまひとつ分かりませんが、`struct.unpack("h", data)`を利用しているということは、バイト列`data`の先頭から2バイトずつ符号有の`short`に変換したいということでしょうか。 であれば以下のようなループでできます。 なお、当然ながらdataの長さは2の倍数である必要があります。 参考:7.3. struct --- 文字列データをパックされたバイナリデータとして解釈する ``` import struct data = 'd\xff\xe5\xff' for i in range(0,len(data),2): n = struct.unpack("h", data[i:i+2]) print n[0] """ -156 -27 """ ``` 追記:data変数値の確認表示 ``` import struct data = 'd\xff\xe5\xff' print len(data) # (13文字ではなく)4 byte print type(data)# # バイト列をそのまま文字列として出力。 # ASCIIコードで文字として表現できない部分は文字化けする print data # d・ # バイト列をreprした結果を出力。 # ASCIIコードで文字として表現できない部分は16進(\x??)表示される # (dataの中身は同じバイト列) print repr(data) # 'd\xff\xe5\xff' # バイト列をlist化した結果を出力。 # repr と同じように16進表示される print list(data) # ['d', '\xff', '\xe5', '\xff'] # リスト型を出力。 # 各要素はrepr と同じように16進表示される data = ['d\xff\xe5\xff'] print data # ['d\xff\xe5\xff'] ```