【问题标题】:How do I convert hex string into signed integer?如何将十六进制字符串转换为有符号整数?
【发布时间】:2011-04-11 22:48:16
【问题描述】:

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

【问题讨论】:

标签: c# .net integer hex signed


【解决方案1】:

您可以使用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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您需要执行unchecked 转换,如下所示:

      sbyte negativeOne = unchecked((sbyte)255);
      

      【讨论】:

      • 我猜,这是因为 OP 要求将“STRING 转换为有符号整数”。不管怎样,你的回答对我很有帮助。谢谢! :)
      猜你喜欢
      • 2021-11-05
      • 2019-05-03
      • 2012-08-29
      • 2011-08-21
      • 2015-11-29
      • 1970-01-01
      相关资源
      最近更新 更多