如何将Hexa-Tri-Decimal数转换为目标c中的int?

时间:2012-04-22 21:06:23

标签: objective-c base-conversion

Hexa-Tri-Decimal数字是0-9和A-Z。我知道我可以使用NSScanner从hex转换,但不知道如何转换Hexa-Tri-Decimal。

例如我有一个带有“0XPM”的NSString,int值应该是43690,“1BLC”将是61680。

2 个答案:

答案 0 :(得分:5)

Objective C建立在C之上,幸运的是,您可以使用那里的函数来完成转换。您正在寻找的是strtol或其中一个兄弟功能。如果我没记错,strtol会处理到base36(你所指的六进制三进制)。

http://www.cplusplus.com/reference/clibrary/cstdlib/strtol/

答案 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;
}

注意:我根本没有测试过这个,所以要小心,让我知道它是怎么回事!