質問

これは1つの16進文字を整数値に変換しますが、(サブ)文字列を作成する必要があります。

Convert.ToInt32(serializedString.Substring(0,1), 16);

.NETには、新しい文字列の作成を伴わない単一の16進文字をバイト(またはint、重要ではない)値に変換する組み込みの方法がありますか?

役に立ちましたか?

解決

int value = "0123456789ABCDEF".IndexOf(char.ToUpper(sourceString[index]));

または、より高速(減算対配列検索)ですが、不正な入力のチェックはありません:

int HexToInt(char hexChar)
{
    hexChar = char.ToUpper(hexChar);  // may not be necessary

    return (int)hexChar < (int)'A' ?
        ((int)hexChar - (int)'0') :
        10 + ((int)hexChar - (int)'A');
}

他のヒント

IMが間違っている場合は修正してください。ただし、単純に使用できます

Convert.ToByte(stringValue, 16);

stringValueが16進数を表す限り?基本パラメータのポイントではないですか?

文字列は不変です。新しい文字列を作成せずに、インデックス0のcharの部分文字列バイト値を取得する方法はないと思います

別の文字列を作成する必要なく、16進値を取得できます。パフォーマンスに関しては、実際に何が得られるのかわかりませんが、あなたが尋ねたので、ここにあなたが要求したものがあります。

    public int FromHex(ref string hexcode, int index)
    {
            char c = hexcode[index];
            switch (c)
            {
                case '1':
                    return 1;
                case '2':
                    return 2;
                case '3':
                    return 3;
                case '4':
                    return 4;
                case '5':
                    return 5;
                case '6':
                    return 6;
                case '7':
                    return 7;
                case '8':
                    return 8;
                case '9':
                    return 9;
                case 'A':
                case 'a':
                    return 0xa;
                case 'B':
                case 'b':
                    return 0xb;
                case 'C':
                case 'c':
                    return 0xc;
                case 'D':
                case 'd':
                    return 0xd;
                case 'E':
                case 'e':
                    return 0xe;
                case 'F':
                case 'f':
                    return 0xf;
                case '0':
                default:
                    return 0;
            }
        }
    }

16進値が1バイトのみであることがわかっている場合は、Int32に変換してキャストするだけです

var b = (byte)(Convert.ToInt32(serializedString, 16));
Encoding.UTF8.GetBytes( serializedString.ToCharArray(), 0, 1)

Cheaperは次のようになります:

Encoding.UTF8.GetBytes( new char[]{ serializedString[0] }, 0, 1)

これにより、文字列全体ではなく、char []に興味深いcharのみが追加されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top