gpt4 book ai didi

python - 解包 "0xff"与 "\xff"

转载 作者:行者123 更新时间:2023-11-28 18:46:48 26 4
gpt4 key购买 nike

我正在尝试使用波形库从波形文件中读取二进制数据。数据被读取并报告为 '\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”。

最佳答案

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

先将open()模式改为rb

然后,如果你读取了 10 个字节,你可以通过以下方式解压它们

struct.unpack('10b', data)

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

关于python - 解包 "0xff"与 "\xff",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18940057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com