10

This may be an immature question, may be am missing something but my question is

Trying convert a char to int to get the ASCII value of that char, in most cases I get correct/expected ASCII code for particular char, in some cases I don't. Can someone explain me why?

Examples:

// Example 1:-   

Console.WriteLine((int)'a');

// gives me 97 perfect!

// Example 2:-

Console.WriteLine((char)1); gives me ☺

// now 

Console.WriteLine((int )'☺');

// this should give me 1, instead it gives me 9786 why?

this happens to ASCII > 127 or ASCII < 32.

4

3 に答える 3

12

\01結果コンソールは、任意の置換を自由に使用して表示できるため、印刷できない文字です。

また、デフォルトの Windows コンソールは Unicode にあまり対応していないため、デフォルトの印刷可能な ASCII 範囲外の文字を印刷すると奇妙なことが起こります。

于 2013-03-07T23:20:37.307 に答える
4

まず、「ASCII > 127」というものはありません。ASCII は 127 (または 126; 削除が適切に ASCII の一部であるかどうか思い出せません) までしかありません。

基本的に、U+0001 (「見出しの開始」) などの印刷できない文字を印刷する場合、それをどう処理するかはディスプレイ デバイスによって決まります。四角形を印刷するコンソールもあれば、スマイリーを印刷するコンソールもあります。ただし、変換自体はコードで元に戻すことができます。

char c = '\u0001';
int i = c; // i = 1
char d = (char) i;
Console.WriteLine(c == d); // True
于 2013-03-07T23:20:55.037 に答える
1

あなたの質問に答えて、なぜConsole.WriteLine((int )'☺');9786 を返すのですか? Unicode の '☺' はバイト 58 38 で表され、整数で表されると 9786 になるからです。

C# の文字は Unicode 文字です。

于 2013-03-07T23:44:01.817 に答える