0

我编写了一个c程序来读取 MP3 文件并打印 TAG2 字段。源代码是:

void main(void)
{
   FILE *w;
   char c[10]={0};    
   int ver, flag, size;    
   w=fopen("test.mp3,"rb");   
   fread(c,1,3,w);    
   printf("TAG2 identifier:%s\n",c);
   fread(&ver,1,2,w);    
   printf("TAG2 version:%d\n",ver);    
   fread(&flag,1,1,w);    
   printf("Flags:%d\n",flag);    
   fread(&size,1,4,w);  //????????    
   ..........
}

我知道每个字节大小的最高有效位都设置为 0,应该被忽略。
但似乎在read()读取大小的 4 个字节时,字节顺序是相反的。如何以正确的字节顺序读取大小?

4

1 回答 1

0

.mp3 文件格式规范应描述数字是先存储最低有效字节(AKA little endian)还是先存储最高有效字节(AKA big endian)。

使用这些知识,您应该能够使用运算符(*(或 <<)、+(或 |))和适当的转换从单个字节重构多字节整数。我在这个答案中以类似的方式保存了 .wav 文件,使用了相反的方法(使用 / 和 %)。

于 2012-09-11T06:59:52.713 回答