我正在尝试使用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)'的输出,也会有所帮助。看起来非常奇怪,一个波形文件将包含文本而不是原始的二进制数据。 –