Хорошо, это больше похоже на «Что, черт возьми, происходит?» чем реальная проблема. Но, учитывая мою относительную неопытность в C, это может привести к большим проблемам.
По сути, я анализирую заголовок файла wav и извлекаю значения. В моем заголовочном файле у меня определены переменные класса:
short channels;
int sampleRate;
int bytesPerSecond;
short bytesPerSample;
short bitsPerSample;
unsigned int size;
И функция в классе для получения этих значений идет:
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];
Диапазоны определены ранее:
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};
Это работает нормально, и я получаю все значения, но если я перемещаю одну из строк в порядке или одно из определений переменных в заголовке, они получают совершенно другое значение. например тестовый wav, над которым я работаю, имеет частоту дискретизации 8000. С помощью приведенного выше кода я получаю правильное значение. Но если я передвину строку, которая присваивает ему значение, выше строки для каналов, я получу 524288000. Отлично. По сути, если порядок, в котором переменным присваиваются их значения, не соответствует порядку, в котором они определены, это все портит. Диапазоны, кажется, не имеют никакого влияния на это поведение.
Кто-нибудь знает, что здесь происходит?