Получение значений из байтового массива (UInt8) в C - PullRequest
1 голос
/ 02 ноября 2010

У меня есть байтовый массив (скажем, UInt8 * somebuffer) с данными в неизвестном формате. Я пытался привести к нескольким типам данных и не смог получить какие-либо значимые данные. Я пытаюсь сделать что-то вроде:

float * floatArray = somebuffer;

, а затем работать с содержимым как с плавающей точкой, и я также попробовал с несколькими другими, такими как int и double. Достаточно ли приведения таким образом для доступа к данным, хранящимся в разных типах? Например, число с плавающей точкой будет иметь индексы 0-3 в байтовом массиве, но должно быть индексом 0 в массиве с плавающей точкой, верно?

Помимо этого, речь идет о линейных аудиоданных PCM, вот настройки, которые я использую для генерации данных PCM (я пытаюсь получить уровни из данных PCM для генерации сигнала):

    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
    [recordSetting setValue:[NSNumber numberWithFloat:22000.0] forKey:AVSampleRateKey]; 
    [recordSetting setValue:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];

    [recordSetting setValue:[NSNumber numberWithInt:8] forKey:AVLinearPCMBitDepthKey];
    [recordSetting setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
    [recordSetting setValue:[NSNumber numberWithBool:YES] forKey:AVLinearPCMIsFloatKey];

1 Ответ

1 голос
/ 02 ноября 2010

Да, этого достаточно, если вы приведете к правильному формату. Ваши рассуждения верны, но чтобы избавиться от предупреждений компилятора, я бы сделал приведение типа:

float <strong>floatArray = (float*</strong>)someBuffer;

...