Я хотел бы знать, как разбирать шестнадцатеричную строку, представляющую число, в Objective-C. Я готов использовать как объективный, так и метод на основе C, либо в порядке.
Пример:
#01FFFFAB
должен анализировать целое число: 33554347
Любая помощь будет оценена!
Ответ 1
Ответ Джошуа Вайнберга в основном правилен, однако префикс 0x
является необязательным при сканировании шестнадцатеричных целых чисел. Если у вас есть строка в формате #01FFFFAB
, вы все равно можете использовать NSScanner
, но вы можете пропустить первый символ.
unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:@"#01FFFFAB"];
[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&result];
Ответ 2
вы можете использовать NSScanner для этого
unsigned int outVal;
NSScanner* scanner = [NSScanner scannerWithString:@"0x01FFFFAB"];
[scanner scanHexInt:&outVal];
outVal
будет содержать int, который вы ищете. 0x не является обязательным.
Ответ 3
strtol() - ваш друг.
Он преобразует строку в длинную, и вы можете передать базу номера в. Сбросьте, что # сначала скроется, или передайте strtol указатель на первый численный символ.
Ответ 4
Вы можете использовать следующую строку для преобразования. Его только один код строки:
NSString *hexString = @"01FFFFAB";
length = (UInt64)strtoull([hexString UTF8String], NULL, 16);
NSLog(@"The required Length is %d", length);
Счастливое кодирование!!!
Ответ 5
В соответствии с яблоком:
Объект NSScanner интерпретирует и преобразует символы NSString в числовые и строковые значения.
поэтому, если u имеет 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];
Ответ 6
Для Swift 3:
var hex = "#01FFFFAB"
hex.remove(at: hex.startIndex)
var rgbValue:UInt32 = 0
Scanner(string: hex).scanHexInt32(&rgbValue)
// rgbValue == 33554347
Ответ 7
Стандартная библиотека Swift 4 представила новый инициализатор для синтаксического анализа всех целых типов. Он принимает строку для синтаксического анализа с помощью radix (т.е. Base) и возвращает необязательное целое число:
let number = Int("01FFFFAB", radix: 16)!