целочисленное значение шестнадцатеричного числа как NSString

Возможный дубликат:
Objective C анализирует шестнадцатеричную строку к целому числу

Мне нужно целочисленное значение NSString, представляющее шестнадцатеричное число. Например, как мне получить значение int (10) NSString @ "A"?


person Malagasy Desi    schedule 19.05.2012    source источник


Ответы (3)


{
  int value;
  [[NSScanner scannerWithString @"A"] scanHexInt: &value];
  // use value here
}

Это был бы самый простой код. Метод scanHexInt возвращает Bool, указывающий на успех, который вы хотите обработать.

person GoZoner    schedule 19.05.2012

Вы можете использовать sscanf со спецификатором формата %, чтобы проанализировать его как шестнадцатеричное целое число:

NSString *str = @"A";
...
int value;
if (sscanf([str UTF8String], "%x", &value) == 1)
{
    // Parsing succeeded
}
else
{
    // Parsing failed, handle error
}
person Adam Rosenfield    schedule 19.05.2012

Вы должны быть немного осторожны с NSStrings, потому что они могут содержать символы Unicode. Обязательно перебирайте строковый символ за символом и убедитесь, что каждый из них является допустимым шестнадцатеричным литералом, то есть символом из набора 0-9, a-f, A-F.

Сделав это (вы можете использовать метод NSString characterAtIndex: для просмотра отдельных символов), тогда довольно легко использовать тот факт, что стандарты ASCII / UTF-8 упорядочивают цифры и буквы последовательно в ваших интересах.

В частности, любой цифровой символ, вычтенный из цифрового символа «0», вернет его целочисленное значение. Аналогичным образом, если вы вычтите «a» из «a» - «f» или «A» из «A» - «F», а затем прибавите 10, вы получите целочисленную версию (10-15) шестнадцатеричного символа.

unichar a = [@"A" characterAtIndex: 0];

if ( a >= '0' && a <= '9' ) a -= '0';
else if ( a >= 'a' && a <= 'z' ) a = ( a - 'a' ) + 10;
else if ( a >= 'A' && a <= 'Z' ) a = ( a - 'A' ) + 10;
else { /* error, raise exception or whatever */ };

// now a == 10 (0x0A)
person par    schedule 19.05.2012