0

16進数を整数に変換するために、次のコーディングを行いました。【私のアルゴリズム】

private static void ConvertFromBase16(string value)
    {
        value = value.ToUpper();
        int result = 0;
        int incrementor = 0;
        for (int i = value.Length-1; i >= 0; i-- )
        {
            char c = value[i];
            char number;
            if (c > 64)
            {
                number = (char)(c - 55); //Ascii character for A start from 65.in hex
                                        //its 10, so i have subtracted 55 from it.
            }
            else
            {
                number = (char)(c - 48); //Ascii character for 0 is 48, so subtracting 
                                         //48
            }
            int n = (int) number;
            result += (number* (int) Math.Pow(16 , incrementor));
            incrementor++;
        }

        Console.WriteLine(result);
    }

ご覧のとおり、上記のコードでは、従来の大文字と小文字の条件を使用する代わりに、変換に ASCII 文字を使用しています。これがすべての OS で機能し、適切な結果が得られるかどうかは、かなり疑問です。

これが正しいアプローチであり、エラーが発生しにくいかどうかを教えてください。

PS: .net の既定のライブラリ メソッド int.parse をグローバリゼーション カルチャと共に使用して変換していることはわかっています。データ構造の概念を学ぶために、これを手動で行いたいと考えています。したがって、デフォルトの .net ライブラリから便利なものを投稿しないでください。

4

3 に答える 3

0

文字列に有効な 16 進数のみが含まれていることを検証し、無効なものが表示された場合は例外をスローする必要があります。

于 2012-09-06T12:17:29.013 に答える
0

実際の文字セットとは無関係に、文字自体を使用してチェックと減算を行うことができます。代わりに、たとえば

number = (char)(c - 48);

使用する

number = (char)(c - '0');

このようにして、フレームワーク/コンパイラに実際の文字セットへの会話をさせます。これは通常、C/C++ でも行われる方法です。

一般に、C# を使用すると、コードが "すべての OS" で動作することを心配する必要はありません。公式にはとにかく Windows でのみ実行されるためです。ただし、デフォルトの文字セットが変更されると、コードが壊れます。

于 2012-09-06T12:16:15.470 に答える