Hexa-Tri-Decimal数字是0-9和A-Z。我知道我可以使用NSScanner从hex转换,但不知道如何转换Hexa-Tri-Decimal。
例如我有一个带有“0XPM”的NSString,int值应该是43690,“1BLC”将是61680。
答案 0 :(得分:5)
Objective C建立在C之上,幸运的是,您可以使用那里的函数来完成转换。您正在寻找的是strtol或其中一个兄弟功能。如果我没记错,strtol会处理到base36(你所指的六进制三进制)。
答案 1 :(得分:1)
我只能考虑使用C字符串来实现这一点,因为它们可以更方便地访问单个字符。
这似乎是一个有待解决的问题,所以我写了一篇文章:
int parseBase36Number(NSString *input)
{
const char *inputCString = [[input lowercaseString] UTF8String];
size_t inputLength = [input length];
int orderOfMagnitudeMultiplier = 1;
int result = 0;
// iterate backward through the number
for (int i = inputLength - 1; i >= 0; i--)
{
char inputChar = inputCString[i];
int charNumericValue;
if (isdigit(inputChar))
{
charNumericValue = inputChar - '0';
}
else if (islower(inputChar))
{
charNumericValue = inputChar - 'a' + 10;
}
else
{
// unhanded character, throw error
}
result += charNumericValue * orderOfMagnitudeMultiplier;
orderOfMagnitudeMultiplier *= 36;
}
return result;
}
注意:我根本没有测试过这个,所以要小心,让我知道它是怎么回事!