gpt4 book ai didi

c# - 改进从十六进制读取有符号 8 位整数的方法

转载 作者:太空宇宙 更新时间:2023-11-03 20:40:55 24 4
gpt4 key购买 nike

场景:

我有一串编码 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;
}

问题:

当两个十六进制字符表示一个带符号的整数(-127 到 127),使用最左边的位作为符号时,是否有更简化和直接的方法来读取它们并将它们转换为整数?

最佳答案

只需将其转换为 int 并通过测试转换后数字的大小并屏蔽掉符号位来处理符号位。

private int HexToInt(string _hexData)
{
int number = Convert.ToInt32(_hexData, 16);
if (number >= 0x80)
return -(number & 0x7F);
return number;
}

关于c# - 改进从十六进制读取有符号 8 位整数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2718030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com