Формат файла RIFF Wave: значения FourCC и HEX-преобразование

Контекст: я разбираю файлы Riff/Wave. Есть документация, идентифицирующая значения FourCC внутри фрагментов Riff. Вот более важные фрагменты для волновых файлов.

FourCC ID для двух отдельных.wav-блоков:

 Chunk ID   "fmt " (0x666D7420)
 Chunk ID   "data" (0x64617461)

Итак, эти значения fmt должны быть равны:

 string "fmt "
 Hex "666D7420"
 int "1718449184"

И эти значения данных должны быть равны:

 string "data"
 Hex "64617461"
 int "1684108385"

Теперь, когда я читаю действительные файлы.wav, fmtChunkID fmt int для FourCC всегда имеет вид:

 fmt int:
 int "544501094"

И данные int всегда есть:

 data int:
 int "1635017060"

Вопрос: Почему задокументированное значение Hex не совпадает с int, которое я возвращаю из потока? Я предполагаю, что не понимаю кое-что о преобразовании Hex в Int.

Дополнительно: я нашел в сети код парсера.wav с подозрительным значением fmt "1718449184". Но я нахожу больше со значением fmt "544501094". Наконец, выполните поиск в Google по запросу "1718449184 AND 544501094"; ничего такого.

Спасибо вам за помощь.

1 ответ

Решение

Endian. См. 0x20746d66 в десятичном виде. (0x20746d66 - это инверсия байтов 0x666d7420.)

В форматах файлов каждый байт должен быть в правильном месте. Если вы случайно читаете их в и из памяти, в зависимости от того, какой у вас процессор и формат файла, вы можете поменять порядок байтов.

Читайте о "Big Endian" и "Little Endian". Некоторые расскажут об этом очень подробно, но на самом деле это очень просто и важно понять, если вы когда-нибудь имели дело с форматами файлов, сетевым трафиком, взаимодействием с оборудованием и многими другими местами.

Другие вопросы по тегам