试图将字符串的第一个符号转换为int,得到奇怪的值

时间:2012-07-26 13:13:34

标签: c# string integer

static void Main(string[] args)
{
    string str_val = "8584348,894";
    //int prefix = Convert.ToInt32(str_val[0]); //prefix = 56 O_o
    //int prefix = (int)str_val[0]; //what, again 56? i need 8!
    int prefix = Convert.ToInt32("8"); //at least this works -_-
}

知道如何将第一个符号转换为正确的数值?

5 个答案:

答案 0 :(得分:11)

如果您使用:

Convert.ToInt32(str_val[0]);

然后你实际上是在调用重载:

Convert.ToInt32(char val);

,它将Unicode / Ascii字符数作为参数传递。

如果要转换第一个字符,则需要强制它为字符串类型:

Convert.ToInt32(str_val.Substring(0, 1));

这样你就可以调用重载:

Convert.ToInt32(string val);

实际上做你想要的(将字符串值转换为此字符串表示的int值)。

答案 1 :(得分:3)

您尝试解析字符串但传入字符。首先将字符转换为字符串。

int prefix = Convert.ToInt32(str_val[0].ToString());

因此字符值8是ASCII值56,您要做的是将值解释为字符串而不是ASCII值。通过使用.ToString()方法,您将字符转换为空终止字符串,可以通过ToInt32方法读取。

答案 2 :(得分:2)

通过这种方式Convert.ToInt32(str_val[0]),您正在读取字符串索引处的字符,该字符串将char转换为int。 int是ascii for it

答案 3 :(得分:1)

与Bridge提到的一样,它获得了ASCII值。当您在字符串类上使用索引器来获取一个字符时,它会将其作为char返回。如果您阅读char documentation,您会看到它在内部存储为数字UTF-16值。它还具有与大多数数字类型的隐式转换,这些数字类型提取UTF-16值,或将数字形式转换为字符形式。这就是你正在做的事情。

您的意思是将其解析为int,而不是获取UTF-16值的数字表示。这就是转换答案全部进来的地方。

答案 4 :(得分:1)

Int32.Parse(str_val[0])

会在字符串中给你编号。