我已经为ID3v2.3标签整理了,因为有4个字节,但这里的帧标头标签总共只有3个字节,而不是4.这似乎意味着我无法使用struct.unpack
获取int
。
例如,我现在使用的标记是:TT2\x00\x00\x0c\x00Torn Within
其中TT2
是名称标识符,\x00\x00\x0c
是大小标识符。标记的内容为\x00Torn Within
,其大小为12个字节。
这也是歌曲的ID3标题。 'ID3\x02\x00\x00\x00\x04NP'
,您可以在其中看到未设置编码和标志。
我已经尝试struct.unpack('>3b', '\x00\x00\x0c')
,但只抓取每个字节的值。
但在那之后,我被困住了,因为除非我在大小标签前加\x00
,否则我无法继续。我该怎么办?
以下是ID3标记文档http://id3.org/id3v2-00以及struct
模块http://docs.python.org/library/struct.html#format-characters
编辑发现我可以执行此操作:int(binascii.hexlify('\x00\x00\x0c'), 16)
但我不认为这是一个很好的解决方案
答案 0 :(得分:1)
在解包之前只需要一个空字节(\x00
):
>>> length = "\x00\x00\x0c"
>>> struct.unpack('>I', '\x00' + length)
(12,)
空字节将长度字节填充到4个字节而不改变含义。 3个大小字节可以容纳的最大值是2 24 等于16777216个字节;添加填充不会以任何方式改变该限制。