我正在尝试将十六进制数据转换为有符号的int / decimal,但无法弄清楚我做错了什么。
我需要FE
转为-2
。
我正在使用Convert.ToInt32(fields[10], 16)
,但收到254
而不是-2
。
非常感谢任何协助。
答案 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