0

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

我需要FE变成-2.

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

任何帮助将不胜感激。

4

3 回答 3

4

int是 32 位宽,所以 0xFE 真的被解释为 0x000000FE 的目的Convert.ToInt32(string, int),它等于 254 的空间int

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

Convert.ToSByte("FE",16)

于 2017-09-13T17:29:42.847 回答
2

将值解释为有符号字节:

sbyte value = Convert.ToSByte("FE", 16); //-2
于 2017-09-13T17:29:02.037 回答
0

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

如果你想对超过 128 个进行环绕,最优雅的解决方案可能是使用有符号字节( sbyte):

csharp> Convert.ToSByte("FE",16);   
-2
于 2017-09-13T17:30:21.217 回答