iPhone写二进制数据

6

如何将二进制数据写入文件?我想原始地将浮点数写入文件,然后再将其作为浮点数读取。你怎么做呢?

2个回答

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进行初始化,添加一个float,然后写入,然后文件将会是4个字节。为什么NSData默认会添加4个字节呢?一个长度为4的NSData应该产生一个长度为4的文件,而不是8。


你能使用十六进制编辑器检查文件内容吗?当它有8个字节时,似乎你应该能够挑出哪4个是浮点数,而另外4个可能会给你一些关于问题所在的线索。 - Tim
确实。最后4个是浮点数。文件看起来像这样:00 00 00 00 00 00 00 42 - quano
显然,使用长度初始化NSMutableData会导致它将该长度附加到其数据中并指向其后的空间。使用长度0进行初始化是解决方案。那么人们可能会问自己,为什么要用除0以外的任何其他长度来初始化它呢? - quano

3
请注意,Objective-C只是C编程语言的扩展。
我通常会创建一个NSFileHandle,然后以以下方式写入二进制数据:
NSFileHandle handle*;
float f;

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接