将 char 转换为小写的棘手方法 - 以及如何反之

本文关键字:方法 何反之 转换 char | 更新日期: 2023-09-27 18:32:13

在这个堆栈溢出答案中,有一段代码可以将字符转换为小写:

        // tricky way to convert to lowercase
        sb.Append((char)(c | 32));

(char)(c | 32)发生了什么,怎么可能做相反的事情来转换为大写?

将 char 转换为小写的棘手方法 - 以及如何反之

这是一个便宜的ASCII技巧,仅适用于该特定编码。 不建议这样做。 但是要回答您的问题,反向操作涉及屏蔽而不是组合:

sb.Append((char)(c & ~32));

在这里,您采用 32 的按位逆并使用按位 AND。 这将迫使该位关闭,并使其他位保持不变。

这样做的原因是 ASCII 字符集的布局使得小写字符的小写和小写字符的小 5 位相同,并且仅第 6 位(3200100000b )不同。 使用按位 OR 时,将添加位。 当用反向掩码时,将删除位。