0

Hexa-Tri-Decimal 数字是 0-9 和 AZ。我知道我可以使用 NSScanner 从十六进制转换,但不确定如何转换 Hexa-Tri-Decimal。

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

4

2 回答 2

5

Objective C 建立在 C 之上,幸运的是,您可以使用那里的函数来完成转换。您正在寻找的是 strtol 或它的兄弟函数之一。如果我没记错 strtol 最多可以处理base36(您指的十六进制三进制)。

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

于 2012-04-22T21:47:38.080 回答
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;
}

注意:我根本没有测试过这个,所以请注意并告诉我它是怎么回事!

于 2012-04-22T21:49:14.383 回答