質問
これは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のみが追加されます。
所属していません StackOverflow