Чтение TAG2 файла mp3 в программе c

Я написал программу 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 байта размера, порядок байтов меняется на противоположный. Как я могу прочитать размер в правильном порядке байтов?


person katy    schedule 11.09.2012    source источник
comment
Почему бы не использовать существующую библиотеку, например id3lib, вместо самостоятельного чтения тегов?   -  person Some programmer dude    schedule 11.09.2012


Ответы (1)


Спецификация формата файла .mp3 должна описывать, сохраняются ли числа младшим значащим байтом первым (AKA с прямым порядком байтов) или старшим значащим байтом первым (также известным как Big Endian).

Используя эти знания, вы сможете реконструировать многобайтовые целые числа из отдельных байтов, используя комбинацию операторов (* (или ‹‹), + (или |)) и соответствующее приведение типов. Я сделал сохранение файла .wav аналогичным образом в этом ответе, используя обратный подход (с / и %) .

person Alexey Frunze    schedule 11.09.2012