16 進数は 0 ~ 9 および AZ です。NSScanner を使用して 16 進から変換できることはわかっていますが、16 進 3 進を変換する方法がわかりません。
たとえば、「0XPM」の NSString があり、int 値は 43690、「1BLC」は 61680 になります。
16 進数は 0 ~ 9 および AZ です。NSScanner を使用して 16 進から変換できることはわかっていますが、16 進 3 進を変換する方法がわかりません。
たとえば、「0XPM」の NSString があり、int 値は 43690、「1BLC」は 61680 になります。
Objective C は C の上に構築されており、幸いなことに、Objective C の関数を使用して変換を行うことができます。探しているのは、strtol またはその兄弟関数の 1 つです。私が正しく思い出すと、strtol は base36 (あなたが参照する 16 進数) まで処理します。
個々の文字に簡単にアクセスできるため、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;
}
注:私はこれをまったくテストしていないので、気をつけて、どうなるか教えてください!