0

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 ツールを使用して再確認しましたが、正しくありませんでした。どんな種類の助けにも本当に感謝します

4

1 に答える 1