2016-01-31 3 views
6

コンピュータプログラミングのルーキーなので、私はトランプカードのスーツシンボルの使用を含む宿題を受けました。私の研究の過程で、私はシンボルを取得するための簡単な方法に出くわした:(char)intはどこからシンボルを取得しますか?

Console.Write((char)6); 

あなたは

Console.Write((char)3); 

を♠与え、あなたが

を♥のように...

います

しかし、私はまだそれらのシンボルを取得するためにC#のロジックを理解していません。つまり、Unicodeテーブルの♠シンボルはU + 2660ですが、私はそれを使用しませんでした。 ASCII表にはこれらの記号も含まれていません。

私の質問は、(char)intの背後にある論理は何ですか?

答えて

8

これらの低い数値(32未満)の場合、これはC#ではなくコンソールの側面であり、Code page 437から来ますが、コンソールに実際に使用される他の意味を持つものは含まれません。タブ、キャリッジリターン、およびベルがあります。これはコンソールウィンドウで直接実行していないコンテキストには移植できません。代わりに0x2660、またはちょうど'\u2660'

1

(char)int背後にあるロジックはcharUnicodeコードポイントをエンコードUTF-16コード単位、一つまたは二であることです。コードポイントは自然に序数であり、文字セットのメンバーの識別子です。それらは16進数で書かれており、具体的にはユニコードの前にU +が付いています(例:U+2660)。

UTF-16は、コードポイントとコードユニットの間のマッピングです。 16ビットのコード単位は整数として操作できます。 charには1つのコードユニットが含まれているため、shortcharに変換できます。さまざまな整数型が相互運用できるため、intcharに変換できます。

したがって、short(またはint)は、コード単位が1つのみのコードポイントのUTF-16コード単位を表す場合に限り、テキストとしての意味を持ちます。 (codepoint to a stringを持つintを変換することもできます)

もちろん、コンパイラにはあなたのためにそれを理解させ、読者も簡単にできるようにすることができます: Console.Write( '♥' );

また、ASCIIを忘れてください。正しいエンコーディングではありません(そうでない場合を除いて)。明確でない場合、文字列はUTF-16コード単位のカウントされたシーケンスです。

関連する問題