如何在ID3v2.2 MP3标签中获得帧大小?

时间:2012-07-14 16:11:20

标签: python struct id3 id3-tag id3v2

我已经为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)但我不认为这是一个很好的解决方案

1 个答案:

答案 0 :(得分:1)

在解包之前只需要一个空字节(\x00):

>>> length = "\x00\x00\x0c"
>>> struct.unpack('>I', '\x00' + length)
(12,)

空字节将长度字节填充到4个字节而不改变含义。 3个大小字节可以容纳的最大值是2 24 等于16777216个字节;添加填充不会以任何方式改变该限制。