转换字符串" 0x1A"到了sbyte

时间:2018-02-21 12:03:04

标签: c#

我得到了例外:

  

输入字符串的格式不正确。

在运行时为以下代码片段。

string str= "0x1A";

sbyte value= Convert.ToSByte(str);

任何人都可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:6)

Convert.ToSByte使用参数int fromBase来指定您要转换的基数 在您的情况下,您必须执行以下操作:

sbyte s = Convert.ToSByte(str, 16); // s == 26

您可以在此Wikipedia article中阅读有关不同基础(也称为基数)的更多信息。

答案 1 :(得分:3)

如果您在例外部分的documentation of ToSByte下查找,则会找到引发此异常的条件:

  

值不包含可选符号后跟数字序列(0到9)

您的值以十六进制格式写入,意思是16的基数。输入字符串不仅包含“数字(0到9)”。为此,您将需要此方法的另一个重载,您可以在其中指定此方法。

如果你看一下Convert.ToSByte Method (String, Int32)的重载,你可以看到它:

  

指定基数中数字的字符串表示形式转换为等效的8位有符号整数。

第二个参数是:

  

fromBase
  类型:System.Int32
  值的基数,必须为2,8,10或16。

因此,指定基数将使您退出异常:

string str = "0x1A";
sbyte value = Convert.ToSByte(str, 16);