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

Python 如何在ID3v2.2 MP3标签中获取帧大小?,python,struct,id3,id3-tag,id3v2,Python,Struct,Id3,Id3 Tag,Id3v2,我已经对ID3v2.3标记进行了分类,因为有4个字节,但是这里帧的头标记总共只有3个字节,而不是4个。这似乎意味着我不能使用struct.unpack从中获取int 例如,我现在使用的标记是:TT2\x00\x00\x0c\x00train in,其中TT2是名称标识符,\x00\x00\x0c是大小标识符。标签的内容是\x00,在内撕开,大小为12字节 这是这首歌的ID3标题'ID3\x02\x00\x00\x00\x04NP',您可以看到未设置编码和标志 我尝试了struct.unpack(

我已经对ID3v2.3标记进行了分类,因为有4个字节,但是这里帧的头标记总共只有3个字节,而不是4个。这似乎意味着我不能使用
struct.unpack
从中获取
int

例如,我现在使用的标记是:
TT2\x00\x00\x0c\x00train in
,其中
TT2
是名称标识符,
\x00\x00\x0c
是大小标识符。标签的内容是
\x00,在
内撕开,大小为12字节

这是这首歌的ID3标题<代码>'ID3\x02\x00\x00\x00\x04NP'
,您可以看到未设置编码和标志

我尝试了
struct.unpack('>3b','\x00\x00\x0c')
,但这只获取每个字节的值

但是在那之后,我被卡住了,因为除非我在尺码标签上加上
\x00
,否则我无法继续。我该怎么办

下面是ID3标记文档,以及
struct
模块的文档

edit发现我可以做到这一点:
int(binascii.hexlify('\x00\x00\x0c'),16)
但我认为这不是一个很好的解决方案

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

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

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

您可以始终预先添加一个
\x00
空字节。@MartijnPieters我也这么认为,但我不确定如果标签变得非常大,比如它是否保存了hires图像或其他东西,这是否会产生任何影响。你认为这不会是一个问题吗?3个字节限制了字段的大小,空填充不会改变这一点。16777216字节对于MP3标签来说已经足够了。