C#两个十六进制byte转成十进制,要兼容十六进制负数
时间: 2024-10-10 14:07:21 浏览: 6
在C#中,将两个十六进制字节(byte)转换成十进制整数可以使用BitConverter.ToInt16()方法。这个方法需要两个字节数组作为输入,并且能够处理正负数。如果涉及到负数,C#会自动根据有符号或无符号字节来处理。
例如,对于两个表示负数的十六进制字节,可以先解析为一个Int16结构,然后检查其Sign字段。如果Sign为负(0x8000),则说明是一个负数,因为Int16类型的范围是从-32768到32767(无符号)或从-32768到32768(有符号,包括零点)。
下面是一个示例代码:
```csharp
byte[] hexBytes = { (byte)'F', (byte)'F' }; // 或者包含负数的字节,如 (byte)'F', (byte)'E'
short decimalValue;
if (BitConverter.IsLittleEndian)
{
decimalValue = BitConverter.ToInt16(hexBytes, 0);
}
else
{
decimalValue = BitConverter.ToInt16(BitConverter.GetBytes(BitConverter.ToInt16(hexBytes, 0)), 0); // 反序系统下可能需要调整字节顺序
}
// 检查是否为负数
bool isNegative = (decimalValue & 0x8000) != 0;
int absoluteValue = isNegative ? unchecked((int)(decimalValue ^ 0x8000)) : decimalValue;
Console.WriteLine($"绝对值:{absoluteValue}");
```