[英]C# converting string to int goes wrong
我有一個包含數字的string
,如下所示:
string keyCode = "1200009990000000000990";
現在我想將位置2上的數字作為integer
,我這樣做是這樣的:
int number = Convert.ToInt32(keyCode[1]);
但是我得到的不是2
,而是50
。
我究竟做錯了什么?
50是char'2'的ASCII碼。 0-> 48、1-> 49等...
你可以做
int number = keyCode[1]-'0';
您觀察到,當您做int n = Convert.ToInt32( '2' );
你得到50
。 沒錯
顯然,您沒有期望獲得50
,您期望獲得2
。 那是不正確的期望。
期望Convert.ToInt32( '2' )
給您2
是不正確的,因為那樣的話,如果您執行Convert.ToInt32( 'A' )
什么呢?
字符不是數字。 但是,當然,在計算機內部,所有內容都用數字表示。 因此,有一個映射告訴我們使用什么數字來表示每個字符。 Unicode是這樣的映射,ASCII是您可能聽說過的另一個映射。 這些映射規定字符'2'
對應於數字50
,就像它們規定字符'A'
對應於數字65
。
Convert.ToInt32( char c )
執行非常基本的轉換,它實際上將字符重新解釋為數字,因此您可以查看該字符對應的數字。 但是,如果您想從'2'
獲得2
,那不是您想要的轉換。
相反,您需要一個更復雜的轉換,如下所示: int n = Int32.Parse( keyCode.SubString( 1, 1 ) );
好吧,您得到了50,因為它是2
的ascii碼。
之所以得到它,是因為您指向的是char
而當c#將char
轉換為int
它會返回其ascii代碼。 您應該改為使用帶string
int.Parse
。
int.Parse(keyCode[1].ToString());
要么
int.Parse(keyCode.Substring(1,1));
正如Ofir所說,另一種方法是int number = int.Parse(keyCode[1].ToString())
。
可以這樣解釋該命令: int
是Int32
簡寫,它包含一個Parse(string)
方法。 僅當輸入是僅包含數字的字符串時, Parse
才起作用,因此除非調用TryParse
(檢查是否可以解析字符串的方法)並返回true
,否則它並不總是最好的用法,但在這種情況下,由於您的輸入字符串始終是數字,因此無需先使用TryParse
就可以使用Parse
。 keyCode[1]
實際上首先隱式地將keyCode轉換為char[]
以便它可以檢索特定的索引,這就是為什么您需要在對其進行解析之前調用ToString()
原因。
這是我個人最喜歡的將string
或char
轉換為int
,因為一旦您了解了顯式和隱式執行的轉換,就很容易理解。 如果要轉換的字符串不是靜態的,則最好使用其他方法,因為使用if
語句檢查是否可以解析該字符串或try
使用它,使得編碼和執行所需的時間比其他解決方案之一更長。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.