2

这个 stackoverflow 答案中,有一段代码可以将 char 转换为小写:

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

发生了什么(char)(c | 32)以及如何做相反的事情来转换为大写?

4

1 回答 1

6

这是一种廉价的 ASCII 技巧,仅适用于该特定编码。不推荐。但要回答您的问题,反向操作涉及屏蔽而不是组合:

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

在这里,您采用按位求逆32并使用按位与。这将迫使这一点关闭并保持其他不变。

这样做的原因是因为 ASCII 字符集的布局使得大写和小写字符的低 5 位相同,仅在第 6 位(3200100000b)不同。当您使用按位或时,您添加了位。当您使用逆进行掩码时,您删除了位。

于 2013-09-19T21:50:18.520 回答