如何在块或外部块中打印完整数组?

时间:2016-10-16 01:55:11

标签: ios objective-c arrays

您好我有一个浮点数组,但我无法打印完整的数组

这是第一个将浮点数成功保存到数组floatDataArray

中的块
  double valuesArray[882000];
double *floatDataArray = valuesArray;
__block int j = 0;
//sampleInfo.size = 0;
[AEAudioFileReader readFileAtURL:amen.url targetAudioDescription:desc readBlock: ^(const AudioBufferList *buffer,UInt32(mBufferBlock)){


    AudioBuffer audioBuffer = buffer->mBuffers[0];

   float *samplesAsCArray = (float *)audioBuffer.mData;
    printf("\n%i", buffer->mBuffers[1]);
    for (int i = 0; i<mBufferBlock; i++) {
        floatDataArray[j] = (double)samplesAsCArray[i] ; //PUT YOUR DATA INTO FLOAT ARRAY
     //   printf("\n%f",floatDataArray[j]);  //PRINT YOUR ARRAY'S DATA IN FLOAT FORM RANGING -1 TO +1

        i++;
        j++;
    }

然后是完成块,它首先通过所有缓冲区

 } completionBlock:^(NSError* error){

       printf("\n%@",floatDataArray);  //Print full array


}];

我可以打印单个值,例如floatDataArray [0],但不能打印它使用%@,%s

发送的完整值

2 个答案:

答案 0 :(得分:1)

如果要打印C数组浮点数,则需要编写一个函数来执行此操作。您无法使用printfNSLog打印C数组而无需编写for循环

如果您要取消注释顶部代码块中的printf行,您就会看到您的数组。但是,如果阵列中确实有882,000个条目,那么打印到控制台的所有条目都需要一个LOOOOOOOOOOOOOO时间,并且不是很有用。

for (int i = 0; i<mBufferBlock; i++) {
    printf("\n%f", floatDataArray[i]
}

您可能希望将输出限制为固定的位数,以使输出文件更小。如果使用6位精度:

for (int i = 0; i<mBufferBlock; i++) {
    printf("\n%06f", floatDataArray[i]
}

然后,对于值<10,您将有9个字节的输出,以及值中每个额外整数位的另一个字节/值(1000.000001将占用12个字节,包括末尾的回车符。)如果所有输出都需要12个字节,这意味着您的输出日志文件大约为10.5 MB。这是 LOT 的文字。

答案 1 :(得分:0)

printf无法打印数组。尝试:

NSLog(@"%@", floatDataArray);