在C中从字节数组(UInt8)中获取值

时间:2010-11-02 18:15:51

标签: c core-audio

我有一个字节数组(比如说,UInt8 * somebuffer),数据格式未知。我尝试过转换为几种数据类型,并且没有成功获取任何有意义的数据。我想要做的是:

float * floatArray = somebuffer;

然后将内容作为一个浮点数处理,我也尝试过其他一些例如int和double。以这种方式进行投射是否足以访问存储为不同类型的数据?例如,float在字节数组中是索引0-3但在float数组中应该是索引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 个答案:

答案 0 :(得分:1)

是的,如果您使用正确的格式,这就足够了。你的推理是正确的,但是为了摆脱编译器警告,我会做一个演员,比如:

float floatArray = (float*)someBuffer;