C# 读取ID3v2.3标签时出现问题?

C# 读取ID3v2.3标签时出现问题?,c#,id3,C#,Id3,我在读取ID3v2.3标记时遇到问题。首先,我从www.id3.org上读到了关于id3标签的内容。id3标签的文档说明它的前3个字节包含“id3”,然后2个字节包含版本和修订号(例如03 00),然后下一个字节包含标志(不同步、扩展标题、实验指示器),然后保留下4个字节的大小。我能看懂尺寸。但我的问题是,当我从当前位置向前进方向寻找指针时(我从ID3标记大小中获取的大小),这意味着我已经在ID3标记的末尾重新搜索,这意味着我们将读取的下一个字节是MP3数据字节,但情况并非如此。因此,请帮助我检

我在读取ID3v2.3标记时遇到问题。首先,我从www.id3.org上读到了关于id3标签的内容。id3标签的文档说明它的前3个字节包含“id3”,然后2个字节包含版本和修订号(例如03 00),然后下一个字节包含标志(不同步、扩展标题、实验指示器),然后保留下4个字节的大小。我能看懂尺寸。但我的问题是,当我从当前位置向前进方向寻找指针时(我从ID3标记大小中获取的大小),这意味着我已经在ID3标记的末尾重新搜索,这意味着我们将读取的下一个字节是MP3数据字节,但情况并非如此。因此,请帮助我检测MP3头和MP3数据的ID3标签大小的帮助。我的第二个问题是MP3帧和ID3帧混合在一起,还是完全脱离了ID3标签。如果它是从ID3标签中分离出来的,那么在ID3标签的末尾有第一个MP3帧。是对还是错?告诉我是否可能是您错误地读取了尺寸?四个大小的字节将其最左边的位置零。这使得一个只有28位。摘自ID3.org文档:

“ID3v2标记大小用 四个字节,其中最大的
有效位(位7)设置为零 在每个字节中,总共有28个 零位被忽略,所以 表示一个257字节长的标记 作为$00 02 01。”

即00000000000000000010000000000100000000001 变成 0000 00000000 00000001 00000001


在标签方面,这可能是我最困惑的事情,因此可能也会让你措手不及。

MP3帧不与ID3帧混合。请注意,在ID3v2.x中,标记头大小值是一个同步安全整数,它本质上是一个整数,转换为每个字节的MSB为0的格式。这相当于在每7位之后插入一个0。阅读维基百科:

您还可以在此处查看:


在下面的链接中,您可以找到ID3标签系统的概述以及如何解码ID3标签的手册说明:

您是否签出了taglib btw?这里有一个C#port:你点击链接了吗?您将看到.cs文件。请注意,许多标记编写器将分配比所需更多的空间,因此当您更改标记时,不需要重写整个文件。