14

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])xx[0]

4

4 回答 4

7

交互式解释器会回显这样的不可打印字符。该字符串包含两个字节,0x1E 和 0x00。您可以将其转换为带有struct.unpack("<h", x)(little endian, 2 bytes, signed) 的整数。

于 2010-01-14T10:58:07.670 回答
3

是的,它是十六进制的,但它的含义取决于 wav 文件的其他输出,例如样本宽度和通道数。您的数据可以通过两种方式读取,2 通道和 1 字节样本宽度(立体声)或 1 通道和 2 字节样本宽度(单声道)。用途x.getparams():第一个数字是通道数,第二个是样本宽度。

这个链接解释得很好。

于 2013-11-17T02:12:23.673 回答
1

这是一个两字节的字符串:

>>> x='\x1e\x00'
>>> map(ord, list(x))
[30, 0]
>>> [ord(i) for i in x]
[30, 0]
于 2010-01-14T11:00:18.980 回答
0

这个字符串代表字节。我想你可以用struct包把它们变成一个整数,它允许解释字节字符串。

于 2010-01-14T10:57:29.080 回答