Hexa-Tri-Decimalの数値は0-9とA-Zです。私は、NSScannerでヘックスから隠すことができますが、Hexa-Tri-Decimalの変換方法についてはわかりません。Hexa-Tri-Decimalの数値を目的のCのintに変換するにはどうすればよいですか?
は、例えば、私は、「1BLCは」だろう43690でなければならない「0XPM」int型の値を持つNSStringのを持っている61680.
Hexa-Tri-Decimalの数値は0-9とA-Zです。私は、NSScannerでヘックスから隠すことができますが、Hexa-Tri-Decimalの変換方法についてはわかりません。Hexa-Tri-Decimalの数値を目的のCのintに変換するにはどうすればよいですか?
は、例えば、私は、「1BLCは」だろう43690でなければならない「0XPM」int型の値を持つNSStringのを持っている61680.
彼らは個々の文字に簡単にアクセスを提供するように私は、この使用して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;
}
注:私は、このすべてをテストし、その世話をし、私はそれが行く方法を知って聞かせていませんでした!
のObjective CはCの上に構築され、そして幸運にも十分なあなたはそこに関数を使用することができます変換を達成する。あなたが探しているのはstrtolか、そのうちの1つは兄弟関数です。私が正しくリコールすると、strtolはbase36(あなたが参照するhexa-tri-decimal)まで処理します。
Ha!ちょっと、Hexa-Tri-Decimalパーサをコーディングしたところ、Cライブラリに入っています。 – joerick
ありがとう、@ Justin808! – joerick
小さな修正の後、これは私がそれに投げなければならないすべてのものと一緒に働いた。 – Justin808
@Paul McCabeの記述通りにstrtolを検討してください。 – Corvusoft