Objective-C разобрать шестнадцатеричную строку в целое - PullRequest
90 голосов
/ 06 сентября 2010

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

пример:

#01FFFFAB

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

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

Ответы [ 7 ]

165 голосов
/ 06 сентября 2010

Ответ Джошуа Вайнберга в основном правильный, однако при сканировании шестнадцатеричных целых чисел префикс 0x является необязательным. Если у вас есть строка в формате #01FFFFAB, вы все равно можете использовать NSScanner, но можете пропустить первый символ.

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

[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&result];
62 голосов
/ 06 сентября 2010

вы можете использовать NSScanner для этого

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

outVal будет содержать искомый int. 0x является необязательным.

12 голосов
/ 06 сентября 2010

strtol () ваш друг.

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

4 голосов
/ 26 августа 2014

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

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

Счастливого кодирования !!!

1 голос
/ 22 декабря 2017

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

let number = Int("01FFFFAB", radix: 16)!
0 голосов
/ 01 августа 2017

Для Swift 3:

var hex = "#01FFFFAB"
hex.remove(at: hex.startIndex)
var rgbValue:UInt32 = 0
Scanner(string: hex).scanHexInt32(&rgbValue)
// rgbValue == 33554347
0 голосов
/ 21 июля 2016

Согласно apple:

Объект 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...