ID3V2 タグのサイズを読み取ろうとしています。私のコードは、この構造体に識別、バージョン、フラグ、およびサイズを含む最初のヘッダーを格納することになっています。コードはビット 0 からビット 9 まで読み取り、ここに格納します。
typedef struct
{
uint32_t id:24; //"ID3"
uint16_t version; // $04 00
uint8_t flags; // %abcd0000
uint32_t size; //4 * %0xxxxxxx
}__attribute__((__packed__))
ID3TAG;
読む:
fread(tag, sizeof(ID3TAG), 1, media);
次に、tag.size の値をこの関数に渡します。この関数は、サイズのビットを unsyncsafe します。
int unsynchsafe(uint32_t in)
{
int out = 0, mask = 0x7F000000;
while (mask) {
out >>= 1;
out |= in & mask;
mask >>= 8;
}
return out;
}
ただし、synchsafe の戻り値は、ヘッダーだけの正しいサイズになることはありません。248627840 を取得しました。exif ツールを使用して再確認しましたが、正しくありませんでした。どんな種類の助けにも本当に感謝します