- Published on
C# char 轉型成 int
如果我們有一個 char,值是一個數字 (0 ~ 9),那我們要如何轉換成 int
var a = '1';
強制轉型
- 直覺的想法是強制轉型,不過得到的結果會是
49,而不是1,因為它轉成ASCII輸出了 (請參考 Wiki )
int i = (int)a;
// 49
Convert.ToInt32
如果使用 Convert.ToInt32 的話會得到相同的結果 49
int i = Convert.ToInt32(a);
// 49
int.Parse
試著使用 int.Parse,得到的結果就是 1 了,不過因為傳入的型別要 string,所以還要 ToString
int i = int.Parse(a.ToString());
// 1
Char.GetNumericValue
- 在
Char裡面有提供一個GetNumericValue靜態方法可以使用,不過因為它的回傳值是double,所以還是需要轉換成int
int i = (int)Char.GetNumericValue(a);
// 1
直接減 0
- 在上星期上課的時候看到一個特別的寫法,直接減掉
'0'就可以得到我們要的結果了1了,真的是很神奇的寫法,後來發現,因為它把兩個字都轉成ASCII了,所以相減的結果還是1(49 - 48)
int i = (a - '0');
// 1
注意:這裡的
0一定要是Char,如果是數字的話,還是會得到49
後記
使用最後一種減掉'0',我覺得是最方便的寫法,不過如果不知道的人就覺會完全看不懂為什麼這樣子寫可以 work。如果要比較好理解的話,就使用 Char.GetNumericValue,我之前都是使用這個方法,不過如果返回值不是要 double 的話,就要在轉一次。
