2017-09-13 177 views
0

我想将十六进制数据转换为有符号整数/十进制,并不能找出我做错了什么。我需要FE变为-2转换二进制为有符号整数/十进制

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

任何援助将不胜感激。

+1

你能否解释一下?你怎么知道是Y你需要得到'-2'而不是'254'? –

+0

我正在与之合作的那个人想要看到一个签名的值,不知道为什么,但这就是要求。虽然这是可能的。此链接在JavaScript中执行。 http://www.free-test-online.com/binary/signed_converter.html – StarScr3am77

+0

这不是一个有符号整数的小数 - 如果你想以这种方式读取它,它是一个有符号的字节。 –

回答

4

int是32个位宽,所以0xFE的真的被解释为0x000000FE用于Convert.ToInt32(string, int)目的,这在int空间等于254。由于你想使用带符号的字节范围值,所以使用Convert.ToSByte(string, int)代替(默认情况下,byte未签名,所以你需要sbyte类型)。

Convert.ToSByte("FE",16)

+0

完美!非常感谢!!! – StarScr3am77

2

解释值作为一个符号字节:

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

Int32的边界是-2 147 483 648到2 147 483 647所以FE比赛254

如果你想在128左右做一次总结,最优雅的解决方案是proably到使用符号字节sbyte):为什么要打开`FE`成`-2`,而不是`254`

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