【发布时间】:2013-09-22 03:41:10
【问题描述】:
我正在尝试使用波形库从波形文件中读取二进制数据。数据被读取并报告为 '\x0f\x06\x0a...' 形式的字符串文字,我想将十六进制数转换为整数(你知道,以十为基数)。我遇到的问题是这些字符串并没有真正被视为十六进制数字,而是有点像 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 的字符串。我很清楚为什么会发生这种情况,但是是否有 unpack 的格式选项可以让我解压 '\ xff'?
struct.unpack('i','0xff')
显然工作正常。同样
struct.unpack('i',r'\xff')
有效。
或者,是否可以方便地转换看起来像 '\xff\x01\x63...' 的字符串 到原始字符串(尽管我不确定这是否有意义,因为“\ x”被视为转义字符(这是正确的术语吗?)而不是字符),或形式为“0xff0x010x63”。
【问题讨论】:
-
欢迎来到 SO 并为这个写得很好的问题 +1。
-
输入的确切形式是什么?它实际上是否有前导单引号和尾随单引号?如果您添加了
print data的确切输出,将会有所帮助。 -
如果您添加了来自
print repr(data)的输出,也会有所帮助。波形文件一开始就包含文本而不是原始二进制数据,这似乎非常奇怪。 -
不幸的是,这很难添加。当我执行
print data时,会显示十个框(可能是因为文件以一堆零开头,这就是 \x00 被解释为的原因。在解释器中写入>>data会产生>>'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' -
粘贴来自
print repr(data)的输出。这只会产生可打印的字符。
标签: python