char到int转换得到ASCII

时间:2013-03-07 23:16:27

标签: c#

这可能是一个不成熟的问题,可能会遗漏一些问题,但我的问题是

尝试将char转换为int以获取char ASCII 值,在大多数情况下,我得到正确/预期 ASCII < / em>特定char的代码,在某些情况下我没有。有人能解释一下为什么吗?

示例:

// 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&gt; 127或ASCII&lt; 32

3 个答案:

答案 0 :(得分:12)

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

此外,默认的Windows控制台不是非常友好的Unicode,因此当您打印超出默认可打印ASCII范围的字符时会发生奇怪的事情。

答案 1 :(得分:4)

首先,没有“ASCII&gt; 127”这样的东西 - ASCII只能达到127(或126;我永远不会记得删除是否是ASCII的正确部分)。

基本上,当您打印出不可打印的字符,例如U + 0001(“标题开头”)时,由显示设备决定如何处理。有些游戏机会打印方块,有些会打印笑脸等等。你当然不应该期望它是可逆的。您可以期望转换本身在代码中是可逆的:

char c = '\u0001';
int i = c; // i = 1
char d = (char) i;
Console.WriteLine(c == d); // True

答案 2 :(得分:1)

在回答你的问题时,为什么Console.WriteLine((int )'☺');返回9786,这是因为Unicode中的'☺'由字节58 38表示,由整数表示为9786。

c#中的字符是Unicode字符。