0

可能重复:
Objective C 将十六进制字符串解析为整数

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

4

3 回答 3

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

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

于 2012-05-19T04:16:44.990 回答
1

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

NSString *str = @"A";
...
int value;
if (sscanf([str UTF8String], "%x", &value) == 1)
{
    // Parsing succeeded
}
else
{
    // Parsing failed, handle error
}
于 2012-05-19T04:02:35.687 回答
1

你必须对 NSStrings 小心一点,因为它们可以包含 Unicode 字符。确保逐个字符地遍历字符串,并确保每个字符都是有效的十六进制文字,即集合 0-9,af,AF 中的一个字符。

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

具体来说,从数字字符“0”中减去的任何数字字符都将返回其整数值。同样,如果从 'a'-'f' 中减去 'a',或从 'A'-'F' 中减去 'A',然后加 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)
于 2012-05-19T04:15:03.023 回答