0

cMP3 ファイルを読み取り、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 リトル エンディアン) に格納されるか、最上位バイトが最初に格納されるか (別名、ビッグ エンディアン) を記述する必要があります。

その知識を使用すると、演算子 (* (または <<)、+ (または |)) と適切なキャストの組み合わせを使用して、個々のバイトからマルチバイト整数を再構築できるはずです。この回答では、逆のアプローチ (/ と % を使用) を使用して、同様の方法で .wav ファイルの保存を行いました。

于 2012-09-11T06:59:52.713 に答える