1

我正在尝试使用以下代码:

float fValue = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"0x41CC8937"];
[scanner scanHexFloat:&fValue];

十六进制 0x41CC8937 = 浮点数 25.567。

但我得到 fValue = 0x4E839912 (float 1103923456.000000),为什么?

4

1 回答 1

3

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

于 2013-05-17T17:35:30.387 回答