将Char转换为int以获得ASCII

本文关键字:ASCII int Char 转换 | 更新日期: 2023-09-27 18:02:45

这可能是一个不成熟的问题,可能是我错过了什么,但我的问题是

尝试将char转换为int以获得该charASCII值,在大多数情况下,我得到正确/预期的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_=">

将Char转换为int以获得ASCII

'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字符。