将二进制转换为有符号 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
我正在尝试将十六进制数据转换为带符号的 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