从NSMutableData保存和检索Sint16

时间:2012-08-09 06:31:17

标签: objective-c ios nsmutabledata

我需要保存的地方,然后检索Sint16(2个字节)。

我明白了:

SInt16* frames = (SInt16*)inBuffer->mAudioData;

并希望保存&frames[i]某处(NSMutableData?),以后可以轻松检索。我试图像这样保存(循环中):

[recordedData appendBytes:&frames[i] length:1];

并检索:

    SInt16* framesRetrieve ;

    //sets up mybytes buffer and reads in data from myData
    framesRetrieve = (SInt16*)malloc([mutableData framesRetrieve]);

    [mutableData getBytes:framesRetrieve];

但这种回归与我投入的不一样。

那么什么可以解决?

感谢。

2 个答案:

答案 0 :(得分:1)

您需要知道数据的长度,然后您可以将整个缓冲区存储在NSMutableData对象中:

存储:

SInt16 *frames = ...;
NSUInteger length = ...;    // Assuming number of elements in frames, not bytes!   
NSMutableData *data = [[NSMutableData alloc] initWithCapacity:0];
[data appendBytes:(const void *)frames length:length * sizeof(SInt16)];

要检索:

SInt16 *frames = (SInt16 *)[data bytes];
NSUInteger length = [data length] / sizeof(SInt16);

答案 1 :(得分:0)

您只从2字节变量复制一个字节。尝试立即将两个字节附加到NSMutableData。

[recordedData appendBytes: frames length:sizeof(SInt16)];