2010-09-11 41 views
11

J'essaie actuellement de déchiffrer des fichiers WAV. Des en-têtes aux données PCM.Pourquoi un nombre entier d'octets est-il stocké à l'envers? Cela s'applique-t-il uniquement aux en-têtes?

J'ai trouvé un PDF (http://www.tdt.com/T2Support/technical_notes/tn0132.pdf) détaillant l'anatomie d'un fichier WAV, et que je suis en mesure d'extraire et de sens des données d'en-tête appropriés à l'aide Ghex2. Mais mes questions sont:

Pourquoi les entiers octets sont-ils stockés en arrière? C'est à dire. déc. 20 est stocké en tant que 0x14000000 au lieu de 0x00000014.

Les entiers des données PCM sont-ils également stockés à l'envers?

+2

Il n'y a pas de "retour". Tout est par convention. Recherche wikipedia pour Endianness. – Detmar

+2

... et une fois que vous êtes clair que la petite et la grande endianness sont raisonnables, essayez d'envelopper votre esprit autour de l'endianness mélangé. Puis pleurer. – dmckee

+1

petit boutiste n'est pas raisonnable cependant. [Qu'en est-il raisonnable?] (Http://fusion.co.id/wp-content/uploads/2015/02/pig-little-endian-1.jpg) – MarcusJ

Répondre

11

Les fichiers WAV sont little-endian (les octets les moins significatifs en premier) parce que le format origine pour les systèmes d'exploitation fonctionnant sur des machines basées sur le processeur Intel qui utilisent le petit format endian pour stocker les numéros.

Si vous y réfléchissez, cela a du sens parce que si vous voulez convertir un entier long en un caractère court ou même un caractère, l'adresse de départ reste la même, il suffit de regarder moins d'octets. Par conséquent, pour le codage 16 bits vers le haut, le format little-endian sera également utilisé pour le PCM. C'est très pratique car vous serez capable de les insérer comme entiers. N'oubliez pas qu'ils seront stockés comme des entiers signés à deux s'ils ont 16 bits, mais pas s'ils sont à 8 bits. (Voir http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html pour plus de détails)

+0

Il est étrange que la page mentionnée indique que Le nombre doit être stocké sous forme big-endian (mais le format utilise effectivement little-endian). – Groo

+0

La page mentionnée ne mentionne plus rien car elle a disparu ... (J'ai constaté que cela arrive assez souvent avec les liens du site web du collège, après quelques années.) –

+0

Je ne suis pas sûr que mon fichier ne soit pas conforme ou Quoi, mais tous les champs numériques (taux d'échantillonnage, débit binaire, etc) sont stockés en petit boutiste, alors que tous les champs de mots (RIFF, WAVE, fmt, etc) sont stockés en gros boutiste. – MarcusJ

3

"En arrière" est subjectif. Certaines machines sont grandes - endian, d'autres sont petites - endian. Dans les contextes orientés octets comme les formats de fichiers et les protocoles réseau, l'ordre est arbitraire. Certains formats aiment spécifier big- ou little-endian, d'autres aiment être flexibles et accepter n'importe quelle forme, avec un drapeau indiquant lequel est utilisé.

Ressemble aux fichiers WAV comme little-endian.