修复错误的binascii奇数长度字符串问题

2024-10-04 05:26:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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首歌曲的歌曲——songs是一个我正在迭代的列表,其中包含49首歌曲

我需要写songbyte——它是一个从8到72的值。目前,我只是反复检查,确保每个songbyte都有正确的值(它是已知正确播放列表的副本,通过diff和hex编辑器验证)。在

我的问题是这条线

^{pr2}$

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

虽然我希望,但我不确定这些信息是否足以帮助我解决问题,因为我无法提供整个脚本的完整细节。有没有其他方法可以把songbyte——以十六进制的形式——写入文件?在


Tags: 脚本lenifsong歌曲播放列表writehex
1条回答
网友
1楼 · 发布于 2024-10-04 05:26:35

您应该使用^{},这正是为了这个目的:

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

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

^{pr2}$

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

相关问题 更多 >