将二进制转换为有符号 int/decimal

Convert binary to signed int/decimal

我正在尝试将十六进制数据转换为带符号的 int/decimal,但无法弄清楚我做错了什么。

我需要FE才能变成-2

我正在使用 Convert.ToInt32(fields[10], 16),但得到的是 254 而不是 -2

如有任何帮助,我们将不胜感激。

将值解释为有符号字节:

sbyte value = Convert.ToSByte("FE", 16); //-2

int 是 32 位宽,所以为了 Convert.ToInt32(string, int) 的目的,0xFE 实际上被解释为 0x000000FE,在 int 的 space 中等于 254 ].

由于您希望使用带符号的字节范围值,请改用 Convert.ToSByte(string, int)byte 默认情况下是无符号的,因此您需要 sbyte 类型) .

Convert.ToSByte("FE",16)

那么 Int32 的边界是 -2 147 483 648 到 2 147 483 647。所以 FE 匹配 254。

如果您想绕过 128,最优雅的解决方案可能是使用带符号的字节sbyte):

csharp> Convert.ToSByte("FE",16);   
-2