2009-10-06 28 views
5

バイナリデータをファイルに書き込むにはどうすればよいですか?私は浮動小数点数を生ファイルに書き出し、それを浮動小数点として読みたいと思っています。あなたはどうやってそれをしますか?iPhoneでバイナリデータを書き込む

答えて

6

はこれで実験されて:奇妙なことが書かれたファイルは8つのバイトではなく4であるように思わということです。長さ0でのNSDataを初期化することも可能です

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSString *file = [documentsDirectory stringByAppendingPathComponent:@"binaryData"]; 

float b = 32.0f; 

NSMutableData *data = [NSMutableData dataWithLength:sizeof(float)]; 
[data appendBytes:&b length:sizeof(float)]; 
[data writeToFile:file atomically:YES]; 

NSData *read = [NSData dataWithContentsOfFile:file]; 
float b2; 
NSRange test = {0,4}; 
[read getBytes:&b2 range:test]; 

、フロートを追加して、書き込みを実行すると、ファイルは4バイトになります。なぜNSDataはデフォルトで4バイトを追加するのですか?長さ4のNSDataは、8ではなく長さ4のファイルになります。

+0

あなたは、ファイルの内容を確認するためにバイナリエディタを使用することはできますか?あなたのフロートがどれであるかを選ぶことができなければならないと思っています。そして、他の4つは、何がうまくいかないかの手がかりを与えるかもしれません。 – Tim

+0

確かに。最後の4つはフロートです。ファイルは次のようになります:00 00 00 00 00 00 42 – quano

+0

NSMutableDataを長さで初期化すると、その長さがデータに追加され、後でスペースを指すようになります。それを長さ0で挿入することが解決策です。それで、なぜ0以外の長さで初期化したいのか、自分自身に尋ねることができます。 – quano

3

Objective-CはCプログラミング言語の拡張版です。

私は通常、この方法をNSFileHandleを作成し、バイナリデータを書き込む:それは8バイトの場合

NSFileHandle handle*; 
float f; 

write([handle fileDescriptor], &f, sizeof(float)); 
関連する問題