簡體   English   中英

C#將字符串轉換為int出錯

[英]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));

你需要

int number = (int)Char.GetNumericValue(keyCode[1]);

需要進行強制轉換 ,因為Char.GetNumericValue返回一個double。

正如Ofir所說,另一種方法是int number = int.Parse(keyCode[1].ToString())

可以這樣解釋該命令: intInt32簡寫,它包含一個Parse(string)方法。 僅當輸入是僅包含數字的字符串時, Parse才起作用,因此除非調用TryParse (檢查是否可以解析字符串的方法)並返回true ,否則它並不總是最好的用法,但在這種情況下,由於您的輸入字符串始終是數字,因此無需先使用TryParse就可以使用Parse keyCode[1]實際上首先隱式地將keyCode轉換為char[]以便它可以檢索特定的索引,這就是為什么您需要在對其進行解析之前調用ToString()原因。

這是我個人最喜歡的將stringchar轉換為int ,因為一旦您了解了顯式和隱式執行的轉換,就很容易理解。 如果要轉換的字符串不是靜態的,則最好使用其他方法,因為使用if語句檢查是否可以解析該字符串或try使用它,使得編碼和執行所需的時間比其他解決方案之一更長。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM