我需要表示十六进制数的 NSString 的整数值。例如,如何获取 NSString @"A" 的 int 值 (10)?
问问题
2369 次
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 回答