0

ID3v2.3 タグは 4 バイトあるので整理しましたが、ここでのフレームのヘッダー タグは合計 3 バイトであり、4 バイトではありませんstruct.unpackintそれから。

たとえば、私が現在取り組んでいるタグは次のとおりですTT2\x00\x00\x0c\x00Torn WithinTT2は名前識別子、\x00\x00\x0cはサイズ識別子です。タグの内容は で\x00Torn Within、サイズは 12 バイトです。

曲の ID3 ヘッダーもここにあります。'ID3\x02\x00\x00\x00\x04NP'、エンコーディングとフラグが設定されていないことがわかります。

私は試しましstruct.unpack('>3b', '\x00\x00\x0c')たが、それは個々のバイトの値を取得するだけです。

しかし、その後\x00、サイズタグの先頭に a を追加しないと先に進めないため、行き詰まります。私は何をしますか?

ID3 タグのドキュメントhttp://id3.org/id3v2-00と、structモジュールのドキュメントhttp://docs.python.org/library/struct.html#format-charactersを次に示します。

編集は私がこれを行うことができることを発見しました:int(binascii.hexlify('\x00\x00\x0c'), 16)しかし、それは素晴らしい解決策だとは思いません

4

1 に答える 1

1

\x00アンパックする前に、null バイト ( ) を先頭に追加します。

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

null バイトは、意味を変更することなく、長さバイトを 4 バイトに埋め込みます。3 サイズのバイトが保持できる最大値は 2 24で、16777216 バイトに相当します。パディングを追加しても、その制限はまったく変更されません。

于 2012-07-14T20:36:27.490 に答える