3

我正在尝试使用波形库从波形文件中读取二进制数据。数据被读取并报告为 '\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 的字符串。我很清楚为什么会这样,但是是否有一个用于解压缩的格式选项允许我解压缩“\xff”?

struct.unpack('i','0xff')

显然工作正常。相似地

struct.unpack('i',r'\xff')

作品。

或者,是否可以方便地将看起来像 '\xff\x01\x63...' 的字符串转换为原始字符串(尽管我不确定这是否有意义,因为 "\x" 被视为转义字符(这是正确的术语吗?)而不是字符),或格式为 '0xff0x010x63'。

4

2 回答 2

1

好的,从评论中可以清楚地看出这是一个二进制文件,而不是字符串文字文件。没关系 - 我们希望文件.wav是二进制数据。

open()将模式更改为rb第一。

然后,如果您读取 10 个字节,您可以通过

struct.unpack('10b', data)

这将返回一个 10 个整数的元组。您快到了 ;-)

于 2013-09-22T04:08:05.067 回答
0

ord()会将字节串元素转换为其对应的值。

>>> ord('\x0f')
15

或者使用适当大小的struct转换。

>>> struct.unpack('b', '\x0f')
(15,)
于 2013-09-22T03:44:00.357 回答