当前位置:  开发笔记 > 编程语言 > 正文

如何使用Cocoa Touch解析带浮点数(生成Java)的二进制文件?

如何解决《如何使用CocoaTouch解析带浮点数(生成Java)的二进制文件?》经验,为你挑选了1个好方法。

给出以下用于生成二进制文件的Java代码:

DataOutputStream out = new DataOutputStream(new FileOutputStream("foo.dat"));
out.writeInt(1234);
out.writeShort(30000);
out.writeFloat(256.384f);

我正在使用以下Objective-C代码并设法解析int和short值:

NSString *path = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"dat"];
NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath:path];

unsigned long intValue;
memcpy(&intValue, [[file readDataOfLength:4] bytes], 4);
intValue = NSSwapBigLongToHost(intValue);

unsigned short shortValue;
memcpy(&shortValue, [[file readDataOfLength:2] bytes], 2);
shortValue = NSSwapBigShortToHost(shortValue);

我现在的问题是浮点值:关于如何解析它的任何线索?



1> Derek Ledbet..:

只是我们提供的功能和类型.

NSSwappedFloat bigEndianFloat;
memcpy(&bigEndianFloat, [[file readDataOfLength:4] bytes], 4);
float floatValue = NSSwapBigFloatToHost(bigEndianFloat);

请注意,在交换字节之前,它们使用特殊类型来保存浮点数.这是因为如果您交换浮点值的字节,它可以更改为信令NaN,并且在某些处理器上,这将通过将其分配给变量而导致硬件异常.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有