programing

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

javamemo 2023. 9. 17. 12:03
반응형

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

Objective-C에서 숫자를 나타내는 16진수 문자열을 구문 분석하는 방법을 알고 싶습니다.저는 목표 또는 C 기반 방법을 둘 다 사용할 의향이 있습니다.

예:

#01FFFFAB

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

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

Joshua Weinberg의 대답은 대부분 맞지만,0xprefix는 16진수 정수를 스캔할 때 선택할 수 있습니다.형식에 문자열이 있는 경우#01FFFFAB, 여전히 사용할 수 있습니다.NSScanner, 첫 번째 캐릭터는 건너뛸 수 있습니다.

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

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

NSS 스캐너를 사용하여 이 작업을(를)

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

outVal당신이 찾고 있는 int가 들어있을 겁니다0x는 옵션입니다.

sttol()는 당신의 친구입니다.

이것은 문자열을 long으로 변환하고, 숫자의 밑부분을 전달할 수 있습니다.#를 제거하고 먼저 종료하거나 첫 번째 숫자 문자에 대한 포인터를 전달합니다.

변환은 아래 라인을 이용하시면 됩니다.단 하나의 라인 코드입니다.

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

해피코딩!!!

스위프트 4 표준 라이브러리는 모든 정수 타입을 파싱하기 위한 새로운 이니셜라이저를 도입했습니다.radix(즉, base)로 구문 분석하는 데 문자열이 필요하고 선택적 정수를 반환합니다.

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

사과에 의하면:

NSS 스캐너 개체는 NSS 문자열 개체의 문자를 숫자 및 문자열 값으로 해석하고 변환합니다.

그래서, 만일 당신이 가지고 있다면,NSData다음은 obju can do next

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

스위프트 3의 경우:

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

언급URL : https://stackoverflow.com/questions/3648411/objective-c-parse-hex-string-to-integer

반응형