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

时间:2017-09-13 17:23:54

标签: c# hex signed-integer

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

我需要FE转为-2

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

非常感谢任何协助。

3 个答案:

答案 0 :(得分:4)

int是32位宽,因此对于Convert.ToInt32(string, int),0xFE实际上被解释为0x000000FE,在int的空间中等于254。

由于您希望使用带符号的字节值范围,因此请使用Convert.ToSByte(string, int)代替byte默认为无符号,因此您需要sbyte类型。< / p>

Convert.ToSByte("FE",16)

答案 1 :(得分:2)

将值解释为带符号的字节:

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

答案 2 :(得分:0)

Int32的范围是-2 147 483 648到2 147 483 647.所以FE匹配254。

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

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