我试图从包含多个十六进制值的NSData对象获取浮点值。例如EC 51 38 41
从这4个字节的值我想获得浮点值11.52。如何在xcode中执行此操作?

我已经尝试了NSScanner(scanFloat,scanHexFloat),NSNumberformatterNSNumber,我创建了一个字节数组并尝试了float myFloat = *(float*)&myByteArray。我在stackoverflow的所有这些选项。

我在Windows中使用C#测试了它,没有问题:

byte[] bytes = new byte[4] { 0xEC, 0x51, 0x38, 0x41 };

float myFloat = System.BitConverter.ToSingle(bytes, 0);


有人知道我必须在xcode中执行此操作吗?

谢谢,本杰明

最佳答案

从外部协议转换二进制数据时,请始终确保包括适当的字节序交换:

uint32_t hostData = CFSwapInt32BigToHost(*(const uint32_t *)[data bytes]);
float value = *(float *)(&hostData);


您必须知道编码数据的字节序。您可能需要改用CFSwapInt32LittleToHost

关于objective-c - 从nsdata Objective-C iOS获取浮点值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18437535/

10-14 23:12