シナリオ:
8 ビットの符号付き整数をエンコードする 16 進文字の文字列があります。各 2 文字は、符号として (2 の補数ではなく) 左端 (MSB) ビットを使用するバイトを表します。これらをループ内で符号付き int に変換していますが、それを行うためのより良い方法があるかどうか疑問に思いました。変換が多すぎて、もっと効率的な方法が欠けていると確信しています。
現在のコード:
string strData = "FFC000407F"; // example input data, encodes: -127, -64, 0, 64, 127
int v;
for (int x = 0; x < strData.Length/2; x++)
{
v = HexToInt(strData.Substring(x * 2, 2));
Console.WriteLine(v); // do stuff with v
}
private int HexToInt(string _hexData)
{
string strBinary = Convert.ToString(Convert.ToInt32(_hexData, 16), 2).PadLeft(_hexData.Length * 4, '0');
int i = Convert.ToInt32(strBinary.Substring(1, 7), 2);
i = (strBinary.Substring(0, 1) == "0" ? i : -i);
return i;
}
質問:
左端のビットを符号として使用して、符号付き int (-127 から 127) を表す場合に、2 つの 16 進文字を読み取り、それらを int に変換する、より合理的で直接的な方法はありますか?