我正在尝试使用以下代码:
float fValue = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"0x41CC8937"];
[scanner scanHexFloat:&fValue];
十六进制 0x41CC8937 = 浮点数 25.567。
但我得到 fValue = 0x4E839912 (float 1103923456.000000),为什么?
我正在尝试使用以下代码:
float fValue = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"0x41CC8937"];
[scanner scanHexFloat:&fValue];
十六进制 0x41CC8937 = 浮点数 25.567。
但我得到 fValue = 0x4E839912 (float 1103923456.000000),为什么?
scanHexFloat
需要一个“十六进制浮点常数”,您可以在此处阅读更多信息:http ://www.exploringbinary.com/hexadecimal-floating-point-constants/ 。
你有什么 32 位浮点值的二进制表示。您可以阅读scanHexInt
并使用联合将数字解释为float
:
union {
float fValue;
unsigned int iValue;
} u;
NSScanner *scanner = [NSScanner scannerWithString:@"0x41CC8937"];
[scanner scanHexInt:&u.iValue];
NSLog(@"%f", u.fValue);
输出:25.566999