十六进制数的整数值为NSString

时间:2012-05-19 03:52:25

标签: iphone xcode

  

可能重复:
  Objective C parse hex string to integer

我需要表示十六进制数的NSString的整数值。例如,如何获取NSString @“A”的int值(10)?

3 个答案:

答案 0 :(得分:4)

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

这将是最简单的代码。方法scanHexInt返回一个Bool,指示您要处理的成功。

答案 1 :(得分:1)

您可以使用sscanf%格式说明符将其解析为十六进制整数:

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

答案 2 :(得分:1)

你必须对NSStrings有点小心,因为它们可以包含Unicode字符。请务必逐个字符地迭代字符串,并确保每个字符串都是有效的十六进制文字,即集合0-9,a-f,A-F中的字符。

完成后(您可以使用NSString方法characterAtIndex:查看单个字符),然后使用ASCII / UTF-8标准按顺序排列数字和字母这一事实是相当容易的。

具体地说,从数字字符“0”中减去的任何数字字符都将返回其整数值。同样,如果从'a' - 'f'中减去'a',或从'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)