0

16 進数は 0 ~ 9 および AZ です。NSScanner を使用して 16 進から変換できることはわかっていますが、16 進 3 進を変換する方法がわかりません。

たとえば、「0XPM」の NSString があり、int 値は 43690、「1BLC」は 61680 になります。

4

2 に答える 2

5

Objective C は C の上に構築されており、幸いなことに、Objective C の関数を使用して変換を行うことができます。探しているのは、strtol またはその兄弟関数の 1 つです。私が正しく思い出すと、strtol は base36 (あなたが参照する 16 進数) まで処理します。

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 に答える