将Char转换为int以获得ASCII
本文关键字:ASCII int Char 转换 | 更新日期: 2023-09-27 18:02:45
这可能是一个不成熟的问题,可能是我错过了什么,但我的问题是
尝试将char
转换为int
以获得该char
的ASCII值,在大多数情况下,我得到正确/预期的ASCII特定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> 127
或ASCII <32
_x002E_=">
'01
是不可打印的字符,因此控制台可以自由地使用任何替换来使其可见。
默认的Windows控制台也不是很Unicode友好,所以当您打印超出默认可打印ASCII范围的字符时,会发生奇怪的事情。
首先,没有"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
在回答您的问题时,为什么Console.WriteLine((int )'☺');
返回9786,这是因为Unicode中的'☺'由字节58 38表示,其由整数表示为9786。
c#中的字符是Unicode字符。