我正在尝试将十六进制数据转换为有符号整数/十进制,但无法弄清楚我做错了什么。
我需要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