可能重复:
如何在 C# 中转换十六进制和十进制之间的数字?
我在使用 c# 转换为带符号的 int 时遇到了困难,可以说我有闲置字符串:
AAFE B4FE B8FE
这里我们有 3 个样本。每个样本(带符号的 16 位)都写为 4 位(2x2 位/字节)的 ASCII 十六进制序列。
有什么建议么?谢谢你。
可能重复:
如何在 C# 中转换十六进制和十进制之间的数字?
我在使用 c# 转换为带符号的 int 时遇到了困难,可以说我有闲置字符串:
AAFE B4FE B8FE
这里我们有 3 个样本。每个样本(带符号的 16 位)都写为 4 位(2x2 位/字节)的 ASCII 十六进制序列。
有什么建议么?谢谢你。
Convert
您可以使用接受基数的类中的重载来解析任何标准基数的数字字符串。在这种情况下,您可能需要这种重载。
然后你可以做这样的事情:
var groupings = "AAFE B4FE B8FE".Split();
var converted = groupings
.Select(grouping => Convert.ToInt16(grouping, 16))
.ToList();
如果您需要指定解析值的字节序(而不是假设它们是 little-endian 字节顺序),那么您需要将每个值byte
放在结果中的适当位置short
。
请注意,HexToByte
如果字符串值的格式不正确,则会引发异常。
static byte HexToByte(string value, int offset)
{
string hex = value.Substring(offset, 2);
return byte.Parse(hex, NumberStyles.HexNumber);
}
static short HexToSigned16(string value, bool isLittleEndian)
{
byte first = HexToByte(value, 0);
byte second = HexToByte(value, 2);
if (isLittleEndian)
return (short)(first | (second << 8));
else
return (short)(second | (first << 8));
}
...
string[] values = "AAFE B4FE B8FE".Split();
foreach (string value in values)
{
Console.WriteLine("{0} == {1}", value, HexToSigned16(value, true));
}