2012-07-26 55 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]) 

會給你數字符串。