2010-09-11 13 views
11

Actualmente estoy tratando de descifrar archivos WAV. De los encabezados a los datos de PCM.¿Por qué los bytes enteros se almacenan al revés? ¿Esto se aplica solo a los encabezados?

He encontrado un PDF (http://www.tdt.com/T2Support/technical_notes/tn0132.pdf) que detalla la anatomía de un archivo WAV, y he podido extraer y dar sentido a los datos de cabecera apropiados con Ghex2. Pero mis preguntas son:

¿Por qué los bytes enteros se almacenan al revés? Es decir. dic. 20 se almacena como 0x14000000 en lugar de 0x00000014.

¿Los números enteros de los datos PCM también están almacenados al revés?

+2

No hay "retrocesos". Todo es por convención. Buscar wikipedia para Endianness. – Detmar

+2

... y una vez que tenga claro que tanto la endianidad grande como la pequeña son razonables, intente envolver su mente en una experiencia mixta. Entonces llora. – dmckee

+1

little endian no es razonable sin embargo. [¿qué tal esto es razonable?] (Http://fusion.co.id/wp-content/uploads/2015/02/pig-little-endian-1.jpg) – MarcusJ

Respuesta

11

Los archivos WAV son little-endian (bytes menos significativos primero) porque el formato se originó para los sistemas operativos que se ejecutan en máquinas basadas en procesadores Intel que usan el formato little endian para almacenar números.

Si lo piensas, tiene sentido, porque si quieres convertir un número entero largo en uno corto o incluso en un carácter, la dirección de inicio sigue siendo la misma, observa menos bytes.

En consecuencia, para una codificación de 16 bits hacia arriba, también se usará el formato little-endian para el PCM. Esto es bastante útil, ya que podrás incluirlos como números enteros. no olvide que se almacenarán como enteros firmados con el complemento de dos si son de 16 bits, pero no si son de 8 bits. (Consulte http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html para obtener más información)

+0

Es extraño que la página mencionada indique que el número debe almacenarse en forma de big-endian (pero el formato realmente usa little-endian). – Groo

+0

La página mencionada ya no declara nada, ya que se ha desvanecido ... (He descubierto que esto sucede muy a menudo con enlaces de sitios web de universidades, después de algunos años) –

+0

No estoy seguro de si mi archivo no cumple o qué, pero todos los campos numéricos (frecuencia de muestreo, velocidad de bits, etc.) se almacenan en little endian, mientras que todos los campos de palabra (RIFF, WAVE, fmt, etc.) se almacenan en big endian. – MarcusJ

3

"Atrás" es subjetivo. Algunas máquinas son grandes: endian, otras son little- endian. En contextos orientados a bytes, como formatos de archivos y protocolos de red, el orden es arbitrario. A algunos formatos les gusta especificar big-o little-endian, otros les gusta ser flexibles y aceptar cualquier forma, con un indicador que indica cuál está en uso.

Parece que los archivos WAV son como little-endian.

Cuestiones relacionadas