2012-07-26 52 views
2
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 -_- 
} 

任何想法如何将第一个符号转换为正确的数值?尝试将字符串的第一个符号转换为int,得到奇怪的值

+2

它发现字符的ascii值,而不是你想知道的情况。 – Bridge 2012-07-26 13:16:00

+0

感谢您解释这个! – Kosmos 2012-07-26 13:24:06

回答

11

如果你使用:

Convert.ToInt32(str_val[0]); 

那么你实际上是调用过载:

Convert.ToInt32(char val); 

这给字符的Unicode/ASCII数字被作为参数传递。

如果你想第一个字符转换,你需要迫使它是一个字符串类型:

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

这样你拨打过载:

Convert.ToInt32(string val); 

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

2

通过这样做Convert.ToInt32(str_val[0])您正在读取将char转换为int的字符串索引处的字符。 INT是它的ascii

+0

请你解释一下-1 – HatSoft 2012-07-26 13:24:51

+0

我没有给你设定-1,它是别人:P我总是给所有回答 – Kosmos 2012-07-26 13:28:45

+0

的人设置+1,但是现在已经恢复,因为你包含了这个“int是ascii为它“在您的答案解释。 :] 问候。 – 2012-07-26 13:34:58

3

你试图解析一个字符串,但传入一个字符。首先将字符转换为字符串。

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

因此,8的字符值是ASCII值56,你想要做的是将该值作为字符串而不是ASCII值进行解释。通过使用.ToString()方法,您可以将字符转换为以空字符结尾的字符串,这可以通过ToInt32方法读取。

1

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

你的意思是将其解析为一个int,而不是获得UTF-16值的数字表示。这就是转换应答所有进来。

1
Int32.Parse(str_val[0]) 

会给你数字符串。