可能的重复项:
目标 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)