Objective-C разбирает шестнадцатеричную строку на целое число
Я хотел бы знать, как разобрать шестнадцатеричную строку, представляющую число, в Objective-C. Я готов использовать как objective, так и метод на основе C, либо это нормально.
пример:
#01FFFFAB
следует разобрать на целое число: 33554347
любая помощь будет оценили!
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];