2013-04-09 177 views
4

我碰到這條線今天代碼:將非數字字符轉換爲int?

int c = (int)'c';

我不知道,你可以抹上charint。所以我測試了一下,發現a = 97,b = 98,c = 99,d = 100等等......

爲什麼'a'97?這些數字與什麼有關?

+3

http://www.dotnetperls.com/ascii-table – 2013-04-09 15:37:42

+0

在您編寫另一行代碼之前閱讀此內容:http://www.joelonsoftware.com/articles/Unicode.html – 2013-04-09 15:49:04

+0

我找到了一份軟件工作開發人員從未寫過任何(適當的)代碼。我必須學習工作! :) – 2013-04-09 15:53:28

回答

11

其他人(到目前爲止)已經提到ASCII。這是一個非常有限的觀點 - 它適用於'a',但不適用於任何口音等 - 這可以很容易地代表char

char僅僅是一個16位無符號整數,它是一個UTF-16代碼單元通常是,它等價於一個Unicode字符,但並不總是 - 單個完整字符有時需要多個代碼單元。有關更多詳細信息,請參閱System.Char的文檔。

charint的隱式轉換(你不需要在你的代碼中投)剛剛轉換16位無符號整數,在自然,無損方式的32位有符號整數 - 就好像你有一個ushort

請注意,ASCII中的每個有效字符在UTF-16中都具有相同的值,這就是爲什麼當這兩個示例僅來自ASCII集的例子時,這兩個字符常常會混淆。

+4

當一個簡單的「這是ASCII」是不夠的,它留給喬恩斯基特到進入病因學。 – 2013-04-09 15:41:55

+1

嗯,我認爲這是唯一的**全**(和100%正確)的答案,它當然值得更多upvotes。 – Zbigniew 2013-04-09 15:43:44

+0

這就是我想要做的。 – 2013-04-09 15:44:25

7

97是字母爲a的UTF-16碼單元值。

基本上這個數字涉及給定字符的UTF-16代碼單元。

+0

[ asciitable.com](http://www.asciitable.com)供快速參考(請參閱** dec **欄)。 – 2013-04-09 15:37:48

+0

技術上正確,但'char'是一個UTF-16代碼單元,不是ASCII字符。 – RoadieRich 2013-04-09 16:13:16

+0

對,我編輯了我的答案 – Zbigniew 2013-04-09 16:23:07

-1

它們是字符代碼,通常稱爲ASCII值。

儘管如此,技術上,字符代碼不是ASCII。

+1

它們是UTF-16編碼單元。 *不*與UTF-8相同。目前還不清楚VS來自哪裏,無論您使用哪個IDE,它都是語言和平臺的一部分。 – 2013-04-09 15:41:07

+0

那麼,因此「我相信」...有關的一點是,它們實際上是與ASCII相一致的字符代碼,但實際上並不是ASCII。 – 2013-04-09 15:43:39

+0

新downvoter關心評論?答案是事實準確的。 – 2013-04-09 16:15:13