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