gpt4 book ai didi

python - 无法修复 binascii 奇数长度字符串问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:23:05 24 4
gpt4 key购买 nike

我这里有一个小脚本需要一些帮助:

for song in songs:
slash = song.rindex('\\')
songbyte = slash + 2
if len(str(songbyte)) < 2:
#if songbyte < 10:
songbyte = "0" + str(songbyte)
f.write(binascii.a2b_hex(songbyte))
else:
f.write(binascii.a2b_hex("{0:x}".format(songbyte)))
f.close()
return

首先,我正在尝试编写一个播放列表。出于测试目的,我正在写一个包含 49 首歌曲的歌曲——歌曲是一个我正在遍历的列表,其中包含 49 首歌曲

我需要写 songbyte -- 它是一个介于 8 到 72 之间的值。目前我只是遍历并确保它对每个 songbyte 都有正确的值(这是一个已知正确的副本播放列表,通过 diff 和十六进制编辑器进行验证)。

我的问题是线路

print(binascii.a2b_hex("{0:x}".format(songbyte)))

抛出“TypeError:奇数长度字符串”。现在,这已经足够描述了。通过调查,我确定当它出错时 songbyte 的值是 8。但是,没有意义的是,这个错误发生在列表中的 37 首歌曲,而其他歌曲的大部分歌曲字节也是 8 —— 并且被我的 len(str(songbyte)) < 2 检查添加了 0 —— 但奇怪的是这个没有。

虽然我希望,但我不确定这些信息是否足以帮助我解决问题,我认为我无法提供整个脚本的完整详细信息。有没有另一种方法可以将 songbyte —— 作为十六进制 —— 写入文件?

最佳答案

你应该使用 struct.pack ,这正是为了这个目的:

import struct
for song in songs:
slash = song.rindex('\\')
songbyte = slash + 2
f.write(struct.pack('!B', songbyte))

格式字符串 "{0:x}" 不会在数字前插入零,您需要 "{0:02x}"

>>> "{0:x}".format(12)
'c'
>>> "{0:02x}".format(12)
'0c'

然而,使用 binascii 会导致不必要的复杂和脆弱的代码。例如,如果值超过 255,它会静默生成超过 2 个字符。

关于python - 无法修复 binascii 奇数长度字符串问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10473234/

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