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

Hen*_*bæk 2 c# uppercase

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

        // tricky way to convert to lowercase
        sb.Append((char)(c | 32));
Run Code Online (Sandbox Code Playgroud)

发生了什么(char)(c | 32)以及如何将相反的方法转换为大写?

pad*_*ddy 6

这是一个廉价的ASCII技巧,只适用于特定的编码.不推荐.但要回答你的问题,反向操作涉及掩蔽而不是组合:

sb.Append((char)(c & ~32));
Run Code Online (Sandbox Code Playgroud)

在这里,您采用按位反转32并使用按位AND.这将迫使该单一位关闭并保持其他位置不变.

这样做的原因是因为ASCII字符集的布局使得低5位对于大写和小写字符是相同的,并且仅相差第6位(32,或00100000b).使用按位或运算时,将该位加入.当使用反向掩码时,将删除该位.

  • 是的,但是我认为哈利波特会像这样做一些鲁莽的事情,只是为了占上一个不会被命名的人.Bitwisius Operandus !! (3认同)
  • 同意.当DOS(以及扩展的ANSI字符集)是福音时,在DOS时代(在UNIX上可能没有那么多)这很常见,即使人们"知道的更好".那时编译器和硬件的速度明显加快.由于缺乏分支,它现在可能仍然更快.但是,您可以通过使用查找表来实现相同的分支. (2认同)