设想:
我有一串十六进制字符,对 8 位有符号整数进行编码。每两个字符代表一个字节,它使用最左边 (MSB) 位作为符号(而不是二进制补码)。我正在将这些转换为循环中的签名整数,并想知道是否有更好的方法来做到这一点。转换太多,我确信我缺少一种更有效的方法。
当前代码:
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)时,是否有更简化和直接的方法来读取两个十六进制字符并将它们转换为 int?