[iphone] Objective-C는 16 진수 문자열을 정수로 구문 분석합니다.

Objective-C에서 숫자를 나타내는 16 진수 문자열을 구문 분석하는 방법을 알고 싶습니다. 객관적인 방법이나 C 기반 방법을 모두 사용할 의향이 있습니다. 둘 다 괜찮습니다.

예:

#01FFFFAB

정수로 구문 분석해야합니다. 33554347

어떤 도움을 주시면 감사하겠습니다!



답변

Joshua Weinberg의 대답은 대부분 정확하지만 0x16 진수 정수를 스캔 할 때 접두사는 선택 사항입니다. 형식의 문자열이있는 경우 #01FFFFAB에도을 사용할 NSScanner수 있지만 첫 번째 문자는 건너 뛸 수 있습니다.

unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"#01FFFFAB"];

[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&result];


답변

NSScanner 를 사용할 수 있습니다.

unsigned int outVal;
NSScanner* scanner = [NSScanner scannerWithString:@"0x01FFFFAB"];
[scanner scanHexInt:&outVal];

outVal찾고있는 int를 포함합니다. 0x는 선택 사항입니다.


답변

strtol ()은 당신의 친구입니다.

문자열을 long으로 변환하고 숫자의 밑수를 전달할 수 있습니다. 먼저 # 사인 오프를 제거하거나 첫 번째 숫자 문자에 대한 포인터를 strtol에 전달합니다.


답변

변환을 위해 아래 줄을 사용할 수 있습니다. 단 한 줄 코드 :

NSString *hexString = @"01FFFFAB";
length = (UInt64)strtoull([hexString UTF8String], NULL, 16);
NSLog(@"The required Length is %d", length);

행복한 코딩 !!!


답변

Swift 4 표준 라이브러리는 모든 정수 유형을 구문 분석하기위한 새로운 이니셜 라이저를 도입했습니다. 기수 (즉, base)로 구문 분석 할 문자열을 사용하고 선택적 정수를 반환합니다.

let number = Int("01FFFFAB", radix: 16)!


답변

사과에 따르면 :

NSScanner 객체는 NSString 객체의 문자를 해석하고 숫자와 문자열 값으로 변환합니다.

그래서 만약 당신이 가지고 있다면 NSData obj를 다음을 할 수 있습니다.

NSString *dataDescription = data.description;
NSString *dataAsString = [dataDescription substringWithRange:NSMakeRange(1, [dataDescription length]-2)];
unsigned intData = 0;
NSScanner *scanner = [NSScanner scannerWithString:dataAsString];
[scanner scanHexInt:&intData];


답변

Swift 3 :

var hex = "#01FFFFAB"
hex.remove(at: hex.startIndex)
var rgbValue:UInt32 = 0
Scanner(string: hex).scanHexInt32(&rgbValue)
// rgbValue == 33554347