2009-10-06 83 views
5

如何将二进制数据写入文件?我想写浮动到一个文件,原始,然后读取它们作为浮动。你是怎样做的?iPhone写入二进制数据

回答

6

一直在尝试这样的:

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]; 

奇怪的是,写入的文件似乎是8个字节,而不是4与0长度初始化NSData的甚至有可能,追加浮动,然后写入,然后文件将是4个字节。为什么NSData默认添加4个字节?一个长度为4的NSData应该产生长度为4而不是8的文件。

+0

你可以使用十六进制编辑器来检查文件的内容时,它具有8个字节?在我看来,你应该能够挑出哪一个是你的浮球,其他四个可能会给你一个线索,看看哪里出了问题。 – Tim 2009-10-06 16:46:24

+0

确实。最后4个是浮动。该文件如下所示:00 00 00 00 00 00 00 42 – quano 2009-10-06 16:53:53

+0

显然,使用长度来初始化一个NSMutableData会导致它将该长度附加到其数据并指向该空间。用长度为0的方式引入它就是解决方案。然后人们可以问自己为什么要用任何其他长度为0以上的长度来初始化它。 – quano 2009-10-06 19:49:11

3

请注意,Objective-C只是C编程语言的扩展。

我通常会创建一个NSFileHandle然后写二进制数据是这样的:

NSFileHandle handle*; 
float f; 

write([handle fileDescriptor], &f, sizeof(float));