Objective-C разбирает шестнадцатеричную строку на целое число


Я хотел бы знать, как разобрать шестнадцатеричную строку, представляющую число, в Objective-C. Я готов использовать как objective, так и метод на основе C, либо это нормально.

пример:

#01FFFFAB

следует разобрать на целое число: 33554347

любая помощь будет оценили!

7 90

7 ответов:

ответ Джошуа Вайнберга в основном правильный, однако 0x префикс является необязательным при сканировании шестнадцатеричных целых чисел. Если у вас есть строка в формате #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 () - ваш друг.

он преобразует строку в длинную, и вы можете передать базу числа. Сначала удалите этот # sign off, или передайте strtol указатель на первый числовой символ.

вы можете использовать нижеприведенную строку для преобразования. Его только одна строка кода:

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

Удачи В Кодировании!!!

согласно apple:

объект NSScanner интерпретирует и преобразует символы NSString объект в число и строковые значения.

Итак, если у вас есть NSData obj u может сделать следующее

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

Swift 4 стандартная библиотека представила новый инициализатор для разбора всех целочисленных типов. Он принимает строку для анализа с помощью radix (т. е. base) и возвращает необязательное целое число:

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