十六进制数的整数值为 NSString



可能的重复项:
目标 C 将十六进制字符串解析为整数

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

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

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

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

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

您必须小心使用 NSStrings,因为它们可以包含 Unicode 字符。 确保逐个字符遍历字符串,并确保每个字符都是有效的十六进制文本,即集合 0-9,a-f,A-F 中的字符。

完成此操作后(您可以使用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)

最新更新