我正在尝试将十六进制数据转换为有符号整数/十进制,但无法弄清楚我做错了什么。
我需要FE
变成-2
.
我正在使用Convert.ToInt32(fields[10], 16)
,但正在获取254
而不是-2
.
任何帮助将不胜感激。
我正在尝试将十六进制数据转换为有符号整数/十进制,但无法弄清楚我做错了什么。
我需要FE
变成-2
.
我正在使用Convert.ToInt32(fields[10], 16)
,但正在获取254
而不是-2
.
任何帮助将不胜感激。
int
是 32 位宽,所以 0xFE 真的被解释为 0x000000FE 的目的Convert.ToInt32(string, int)
,它等于 254 的空间int
。
由于您想要使用有符号字节范围的值,请Convert.ToSByte(string, int)
改用(byte
默认情况下是无符号的,因此您需要该sbyte
类型)。
Convert.ToSByte("FE",16)
将值解释为有符号字节:
sbyte value = Convert.ToSByte("FE", 16); //-2
那么边界Int32
是 -2 147 483 648 到 2 147 483 647。所以FE
匹配 254。
如果你想对超过 128 个进行环绕,最优雅的解决方案可能是使用有符号字节( sbyte
):
csharp> Convert.ToSByte("FE",16);
-2