如何将十六进制字符串转换为有符号整数?

时间:2010-09-14 00:50:21

标签: c# .net integer hex signed

我得到一个十六进制字符串,需要转换为带符号的8位整数。目前我正在使用Int16 / Int32进行转换,这显然不会给出8位整数的负值。如果我在十六进制中得到值255,我如何将其转换为十进制的-1?我假设我想使用sbyte,但我不确定如何正确地获得该值。

3 个答案:

答案 0 :(得分:10)

您可以使用Convert.ToSByte

例如:

string x = "aa";
sbyte v = Convert.ToSByte(x, 16);
// result: v = 0xAA or -86

您也可以使用sbyte.Parse

例如:

string y = "bb";
sbyte w = sbyte.Parse(y, System.Globalization.NumberStyles.HexNumber);
// result: w = 0xBB or -69

回答有关Int16的上部或下部字节的问题:

string signed_short = "feff";

// Truncate 16 bit value down to 8 bit
sbyte b1 = (sbyte)Convert.ToInt16(signed_short, 16);
sbyte b2 = (sbyte)short.Parse(signed_short, System.Globalization.NumberStyles.HexNumber);
// result: b1 = 0xFF or -1
// result: b2 = 0xFF or -1

// Use upper 8 bit of 16 bit
sbyte b3 = (sbyte)(Convert.ToInt16(signed_short, 16) >> 8);
sbyte b4 = (sbyte)(short.Parse(signed_short, System.Globalization.NumberStyles.HexNumber) >> 8);
// result: b3 = 0xFE or -2
// result: b4 = 0xFE or -2

答案 1 :(得分:2)

您需要执行unchecked演员表,如下所示:

sbyte negativeOne = unchecked((sbyte)255);

答案 2 :(得分:0)

我的解决方案是将第一个取16位整数的前8位并将它们存储在sbyte中。