(char)int从哪里得到它的符号?

时间:2016-01-31 17:10:52

标签: c# char

作为一名计算机编程新手,我获得了涉及使用扑克牌套装符号的家庭作业。在我的研究过程中,我遇到了一种简单的方法来检索符号:

 Console.Write((char)6);

给你♠

  Console.Write((char)3);

给你♥

依旧......

但是,我仍然不明白C#用于检索这些符号的逻辑。我的意思是,Unicode表中的♠符号是U + 2660,但我没有使用它。 ASCII表甚至不包含这些符号。

所以我的问题是,(char)int背后的逻辑是什么?

2 个答案:

答案 0 :(得分:8)

对于这些低数字(低于32),这是控制台的一个方面,而不是C#,它来自Code page 437 - 虽然它不会包含那些具有其他意义的控制台实际上使用,如标签,回车和铃。对于您未直接在控制台窗口中运行的任何环境,这都不是真正可移植的,您应该使用例如改为0x2660,或仅'\u2660'

答案 1 :(得分:1)

(char)int背后的逻辑是char是UTF-16代码单元,其中一个或两个编码Unicode代码点。代码点是自然序数,是字符集成员的标识符。它们通常用十六进制编写,特别是Unicode,前面是U +,例如U+2660

UTF-16是代码点和代码单元之间的映射。 16位的代码单元可以作为整数操作。由于char包含一个代码单元,因此您可以将short转换为char。由于不同的整数类型可以互操作,因此您可以将int转换为char

因此,只有当short(或int)代表只有一个代码单元的代码点的UTF-16代码单元时,它才具有文本含义。 (你也可以转换一个包含整个codepoint to a string的int。)

当然,您可以让编译器为您解决问题,并使您的读者更容易:     Console.Write('♥&#39);

另外,忘记ASCII。它永远不是正确的编码(除非它是)。如果不清楚,字符串是UTF-16代码单元的计数序列。