x
我通过以下方式为变量赋值:
import wave
w = wave.open('/usr/share/sounds/ekiga/voicemail.wav', 'r')
x = w.readframes(1)
当我输入 x 我得到:
'\x1e\x00'
所以x
得到了一个值。但那是什么?是十六进制的吗?告诉我那个和type(x)
一个字符串。谁能告诉我应该如何解释这个字符串?我可以将它们转换为整数吗?type(x[0])
x
x[0]
交互式解释器会回显这样的不可打印字符。该字符串包含两个字节,0x1E 和 0x00。您可以将其转换为带有struct.unpack("<h", x)
(little endian, 2 bytes, signed) 的整数。
是的,它是十六进制的,但它的含义取决于 wav 文件的其他输出,例如样本宽度和通道数。您的数据可以通过两种方式读取,2 通道和 1 字节样本宽度(立体声)或 1 通道和 2 字节样本宽度(单声道)。用途x.getparams()
:第一个数字是通道数,第二个是样本宽度。
这个链接解释得很好。
这是一个两字节的字符串:
>>> x='\x1e\x00'
>>> map(ord, list(x))
[30, 0]
>>> [ord(i) for i in x]
[30, 0]
这个字符串代表字节。我想你可以用struct包把它们变成一个整数,它允许解释字节字符串。