作为一名计算机编程新手,我获得了涉及使用扑克牌套装符号的家庭作业。在我的研究过程中,我遇到了一种简单的方法来检索符号:
Console.Write((char)6);
给你♠
Console.Write((char)3);
给你♥
依旧......
但是,我仍然不明白C#用于检索这些符号的逻辑。我的意思是,Unicode表中的♠符号是U + 2660,但我没有使用它。 ASCII表甚至不包含这些符号。
所以我的问题是,(char)int
背后的逻辑是什么?
答案 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代码单元的计数序列。