我试图从包含多个十六进制值的NSData
对象获取浮点值。例如EC 51 38 41
从这4个字节的值我想获得浮点值11.52。如何在xcode中执行此操作?
我已经尝试了NSScanner
(scanFloat,scanHexFloat),NSNumberformatter
和NSNumber
,我创建了一个字节数组并尝试了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/