我正在嘗試使用wave庫從波形文件中讀取二進制數據。數據被讀取並報告爲'\ x0f \ x06 \ x0a ...'形式的字符串文字,我想將十六進制數字轉換爲整數(您知道,以十爲底)。我遇到的問題是這些字符串並不是真正被當作十六進制數字,而是有點像unicode字符。解壓「0xff」與「 xff」
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'?
struct.unpack('i','0xff')
顯然工作正常。同樣
struct.unpack('i',r'\xff')
的作品。
或者,是否有方便將字符串轉換爲'\ xff \ x01 \ x63 ...' 爲原始字符串(儘管我不確定這是否合理,因爲「\ x」被視爲轉義字符(這是正確的術語?)而不是字符),或者以'0xff0x010x63'的形式處理。
歡迎來到SO和+1爲寫得好的問題。 –
輸入的確切形式是什麼?它是否有前導和尾隨單引號?如果您添加了「打印數據」的確切輸出,這將有所幫助。 –
如果您添加了'print repr(data)'的輸出,也會有所幫助。看起來非常奇怪,一個波形文件將包含文本而不是原始的二進制數據。 –