10

这可能是一个不成熟的问题,可能缺少一些东西,但我的问题是

尝试将 a 转换为charASCIIintchar大多数情况下,我得到了特定的正确/预期的ASCIIchar,在某些情况下我没有。有人可以解释我为什么吗?

例子:

// 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?

这发生在 ASCII >127或 ASCII < 32

4

3 回答 3

12

\01是不可打印的字符,因为结果控制台可以自由使用任何替换来使其可见。

此外,默认的 Windows 控制台对 Unicode 不是很友好,所以当您打印默认可打印 ASCII 范围之外的字符时会发生奇怪的事情。

于 2013-03-07T23:20:37.307 回答
4

首先,没有“ASCII > 127”之类的东西——ASCII 只能达到 127(或 126;我不记得 delete 是否正确地属于 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 回答