2010-09-11 2 views
11

В настоящее время я пытаюсь расшифровать файлы WAV. От заголовков к данным PCM.Почему байты целых чисел хранятся в обратном порядке? Это относится только к заголовкам?

Я нашел PDF (http://www.tdt.com/T2Support/technical_notes/tn0132.pdf), подробно описывающий анатомию WAV-файла, и я смог извлечь и понять соответствующие данные заголовка с помощью Ghex2. Но у меня вопросы:

Почему сущ. Целых чисел хранится в обратном порядке? То есть Декабре 20 сохраняется как 0x14000000 вместо 0x00000014.

Сохранены ли целые числа данных PCM в обратном направлении?

+2

Нет «назад». Это все по соглашению. Поиск википедии для Endianness. – Detmar

+2

... и как только вы поняли, что и большая, и маленькая энтианность разумны, попробуйте обернуть свой разум вокруг смешанной сущности. Тогда плачь. – dmckee

+1

Маленький кончик не разумен. [что об этом разумно?] (Http://fusion.co.id/wp-content/uploads/2015/02/pig-little-endian-1.jpg) – MarcusJ

ответ

11

WAV-файлы имеют минимально-младшие байты (наименее значимые байты), потому что формат создан для операционных систем, работающих на компьютерах на базе процессоров Intel, которые используют малоформатный формат для хранения чисел.

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

Следовательно, для 16-битной кодировки вверх, для PCM также будет использоваться малоформатный формат. Это очень удобно, так как вы сможете вытащить их в виде целых чисел. не забывайте, что они будут сохранены в виде двоих дополняемых целых чисел, если они 16 бит, но не 8 бит. (см. http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html для получения более подробной информации)

+0

Странно, что на указанной странице указано, что номер должен быть сохранен в формате big-endian (но формат фактически использует мало-endian). – Groo

+0

Эта страница больше не заявляет ничего, поскольку она исчезла ... (Я обнаружил, что это происходит довольно часто с ссылками на веб-сайт колледжа через несколько лет.) –

+0

Я не уверен, что мой файл не соответствует или что, но все числовые поля (частота дискретизации, скорость передачи битов и т. д.) хранятся в маленьком конце, тогда как все поля слов (RIFF, WAVE, fmt и т. д.) хранятся в формате big endian. – MarcusJ

3

«Назад» является субъективным. Некоторые машины большие - endian, другие маленькие - endian. В байт-ориентированных контекстах, таких как форматы файлов и сетевые протоколы, порядок произволен. Некоторые форматы любят указывать большие или мало-endian, другие любят быть гибкими и принимают любую форму с флагом, указывающим, что используется.

Похоже, что файлы WAV также похожи на little-endian.