2011-12-27 18 views
0

NSDataオブジェクトに変換する私のiPhoneアプリケーションにオーディオファイルがあります。理想的には、私はオーディオファイルから二倍の配列を取得したいと思います。 NSDataを複素数の配列に変換する方法はありますか?Objective CでNSDataをダブル配列に変換

<0000001c 66747970 6d703432 00000001 6d703431 6d703432 69736f6d 00000008 77696465 004d956e 6d646174 21000340 681c210c 53ed990c 1f33e94d ab588b95 55a61078 08799c67 f1f706cc 595b4eb6 08cfb807 ea0e3c40 03c13303 e674e05a... 

答えて

2

-bytes方法はNSDataの生のバイトを返す:

ここデータは、オーディオファイルのNSDataオブジェクトである線NSLog(@"%@\n", data)から電流が出力されます。次に、それをdoubleへのポインタにキャストすることができます(正しいエンディアンを仮定して)。

const double* array_of_doubles = (const double*)[data bytes]; 
NSUInteger size_of_array = [data length]/sizeof(double); 

編集:データがMP4ファイルです。 MP4を意味のあるdouble配列に直接変換することはできません。私はあなたが何をしたいのか分からないが、おそらくAVAssetReaderが助けになるだろう。

+0

私はこのことをやっている巨大な数字を取得していますが、私は正しいとは確信していません。 「正しいエンディアンを仮定する」とはどういう意味ですか? – coder

+0

@coder:http://en.wikipedia.org/wiki/Endianness#Examples_of_storing_the_value_0A0B0C0Dh_in_memory。そして、彼らはダブルスとして保管されていると確信していますか?私は整数が可能性が高いと思います。 – kennytm

+0

これらは倍精度または整数として格納されません。この行を実行すると、16進数の値が表示されます。NSLog(@ "data:%@"、data);データがNSDataオブジェクトの場合... – coder