Objective-C에서 숫자를 나타내는 16 진수 문자열을 구문 분석하는 방법을 알고 싶습니다. 객관적인 방법이나 C 기반 방법을 모두 사용할 의향이 있습니다. 둘 다 괜찮습니다.
예:
#01FFFFAB
정수로 구문 분석해야합니다. 33554347
어떤 도움을 주시면 감사하겠습니다!
답변
Joshua Weinberg의 대답은 대부분 정확하지만 0x
16 진수 정수를 스캔 할 때 접두사는 선택 사항입니다. 형식의 문자열이있는 경우 #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