Я знаю, что что-то не так, потому что sizeof(struct ID3V2frame)
вернется:
sizeof(char[4]) + sizeof(char pointer) + sizeof(int[4])
Обратите внимание, что структура имеет указатель на символ, и указатель в вашей системе составляет, вероятно, 4 байта. Таким образом, вы fread () неверный размер и неправильный путь.
Я не знаю об ID3, но где-то в заголовке должен быть размер этой строки.
Редактировать: чтение документа
Обзор кадра ID3v2
Поскольку тег состоит из заголовка тега
и тело тега с одним или несколькими
кадры, все кадры состоит из
заголовок кадра, за которым следует один или несколько
поля, содержащие фактические
Информация. Макет рамы
заголовок:
Идентификатор кадра $ xx xx xx xx (четыре символа)
Размер $ хх хх хх хх
Флаги $ хх хх
Идентификатор кадра сопровождается размером
дескриптор, делающий полный размер заголовка
из десяти байтов в каждом кадре. Размер
рассчитывается как размер кадра, исключая
заголовок кадра (размер кадра - 10).
Ваша структура фрейма неверна.
После того, как вы исправили свою структуру и получили правильную сумму size
, вы можете fread()
size-10
байт получить содержимое кадра.
Будьте осторожны, потому что вам нужно проверить идентификатор кадра, чтобы увидеть, является ли он именем файла заголовка, поскольку в спецификации сказано, что они могут быть в ЛЮБОМ порядке.
Пожалуйста, обратитесь к документации. ID3v2 кажется хорошо документированным. Я смог получить всю эту информацию за 5 минут.
http://www.id3.org/id3v2.3.0