什么是c#中的\ uffff

时间:2018-01-29 22:01:47

标签: c#

当我试图做

char c = (char)-1;

我收到编译错误,指出Constant值' -1'不能转换成“char”字样。

这让我觉得这是一个无效的转换。但是当我在运行时执行此操作时,我会回到角色'\uffff'

出于好奇,这个角色是什么以及为什么编译器不喜欢它?

1 个答案:

答案 0 :(得分:4)

C#使用Unicode UTF-16对字符串和字符进行编码。 UTF-16中的ffff是“非字符”。当您使用\u为字符串作为前缀时,它会告诉C#将以下字符视为Unicode代码点。所以在这里,您的代码点是十六进制的ffff或十进制的65535。 C#中的char在引擎盖下表示为ushort,并且两者之间存在隐式转换。此处-1超出了ushort的范围,溢出到ushort.MaxValue 65535。 (默认情况下,C#中的整数运算不会在溢出时抛出异常。要启用此行为,请使用checked块。)