2013-05-17 5 views
1

나는 다음과 같은 코드를 사용하려고 해요 :NSScaner - HexFloatValue를 가져올 수 없습니까?

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

진수 0x41CC8937 =이 25.567을 떠.

하지만 fValue = 0x4E839912 (float 1103923456.000000)가 표시됩니다. 이유가 무엇입니까?

+0

http://stackoverflow.com/questions/594797/how-to-use-nsscanner을 –

+0

NSScanner에서 문자열로만 작업합니다. – SAKrisT

+0

문서 작성시 - 결과가 NULL 인이 메서드를 호출하여 16 진수 부동 소수점 표현을 지나치게 스캔합니다. 이해하는 방법? – TESTer

답변

3

scanHexFloat은 "16 진수 부동 소수점 상수"를 예상합니다. 자세한 내용은 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

+0

고맙습니다! 결과로서 NULL를 지정해이 메소드를 호출하면, 16 진수의 float 표현을 단순히 주사 할 수 있습니다. 이게 어떻게 작동합니까? – TESTer

+0

@TESTer : 값에 관심이 없으며 입력에서 16 진수를 건너 뛰고 싶다면'[scanner scanHexInt : NULL]'을 호출하면됩니다. –

관련 문제