좋아요, 이것은 '도대체 무슨 일이야?' 실제 문제보다. 그러나 C에 대한 나의 상대적인 미숙함을 고려할 때, 그것은 더 큰 문제들을 암시 할 수 있습니다.바이트를 가져 오는 순서에 따라 NSData에서 바이트를 읽을 때 다른 값을 얻는 이유는 무엇입니까?
기본적으로 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이됩니다. 기본적으로 변수에 주어진 값의 순서가 정의 된 순서와 일치하지 않으면 변수의 순서가 엉망입니다. 범위는이 동작에 영향을 미치지 않는 것 같습니다.
여기에 무슨 일이 일어나는가에 대한 단서가 누구에게 있습니까?
문제가있을 가능성이 높으므로 범위 변수를 정의하는 코드를 제공해야합니다. –
처음에 그것에 대해 생각했지만, 효과가없는 것을 변경할 수 있었기 때문에 보람이 없었습니다. – Septih