Ok, c'est plus d'un 'Qu'est-ce qui se passe?' qu'un problème réel. Mais étant donné mon inexpérience relative avec C, cela pourrait engendrer de plus grands problèmes.Pourquoi est-ce que j'obtiens des valeurs différentes en lisant des octets de NSData selon l'ordre dans lequel j'obtiens les octets?
Fondamentalement, je suis en train d'analyser l'en-tête d'un fichier wav et de saisir les valeurs. Dans mon dossier d'en-tête, j'ai les variables de classe définies:
short channels;
int sampleRate;
int bytesPerSecond;
short bytesPerSample;
short bitsPerSample;
unsigned int size;
Et la fonction dans la classe pour obtenir ces valeurs va:
NSData * fileData = [[NSData alloc] initWithContentsOfFile:filePath];
[fileData getBytes:&channels range:CHANNELS_R];
[fileData getBytes:&sampleRate range:SAMPLES_R];
[fileData getBytes:&bytesPerSecond range:BYTES_PER_SEC_R];
[fileData getBytes:&bytesPerSample range:BYTES_PER_SAMPLE_R];
[fileData getBytes:&bitsPerSample range:BITS_PER_SAMPLE_R];
[fileData getBytes:&size range:LENGTH_R];
Les plages sont définies précédemment:
const NSRange CHANNELS_R = {22,23};
const NSRange SAMPLES_R = {24,27};
const NSRange BYTES_PER_SEC_R = {28,31};
const NSRange BYTES_PER_SAMPLE_R = {32,33};
const NSRange BITS_PER_SAMPLE_R = {34,35};
const NSRange LENGTH_R = {40,43};
Cela fonctionne bien et j'obtiens toutes les valeurs, mais, si je déplace l'une des lignes dans l'ordre, ou l'une des définitions de variables dans l'en-tête, elles ont une valeur complètement différente. par exemple. le wav de test sur lequel je travaille a un taux d'échantillonnage de 8000. Avec le code ci-dessus, j'obtiens la valeur correcte. Mais si je déplace la ligne qui lui attribue la valeur au-dessus de la ligne pour les canaux, je reçois 524288000. Super. Fondamentalement, si l'ordre dans lequel les variables sont données leur valeur ne correspond pas à l'ordre dans lequel elles sont définies, cela les gâche. Les plages ne semblent pas avoir d'impact sur ce comportement.
Quelqu'un sait-il ce qui se passe ici?
Vous devez fournir votre code qui définit les variables de plage, car le problème est très probablement là. –
Ajouté dans. Pensé à ce sujet initialement, mais puisque je pouvais changer ceux sans effet, il ne semblait pas utile. – Septih