您好我有一个浮点数组,但我无法打印完整的数组
这是第一个将浮点数成功保存到数组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
发送的完整值答案 0 :(得分:1)
如果要打印C数组浮点数,则需要编写一个函数来执行此操作。您无法使用printf
或NSLog
打印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);