我正在尝试从包含多个十六进制值的 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 中执行此操作吗???
谢谢,本杰明
最佳答案
从外部协议(protocol)转换二进制数据时,始终确保包含适当的字节序交换:
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/