【发布时间】:2019-07-22 12:38:56
【问题描述】:
我目前正在学习 C#,并且想知道 C# 是否与 chr 和 ord 有一个等效。
【问题讨论】:
-
只需 cast,如果
c的类型为char且i的类型为int:char c = (char) i;和int i = c; -
显式转换!
我目前正在学习 C#,并且想知道 C# 是否与 chr 和 ord 有一个等效。
【问题讨论】:
c 的类型为 char 且 i 的类型为 int:char c = (char) i; 和 int i = c;
在 Python 3 中,字符串根据 Unicode 代码点工作,而在 C# 中,char 是 UTF-16 代码单元,因此如果您在 int 和 char 之间进行转换,您将无法处理基本多语言平面之外的字符。
如果处理非 BMP 代码点对您很重要,则 chr 的等价物将是 char.ConvertFromUtf32(int) - 这将返回 string,因为非 BMP 字符最终将被表示为两个 UTF-16 代码单元。
ord 的等效项是char.ConvertToUtf32(string, int),它允许您在字符串中的给定索引处查找代码点,同时考虑它是否由两个 UTF-16 代码单元组成。相比之下,如果您有 char,那么您能做的最好的事情就是演员表。
【讨论】:
在C#中,char 有效地是UInt16;这就是为什么我们可以简单地cast:
chr: (char) 显式 强制转换(如果 i 超出 [0..UInt16.MaxValue] 范围,我们将出现整数溢出)
int i = ...
char c = (char) i;
ord: (int) 甚至 implicit 转换(从char 转换到int 总是可能的)
char c = ...
int i = c;
【讨论】: