在这个stackoverflow答案中,有一段代码将char转换为小写:
// tricky way to convert to lowercase
sb.Append((char)(c | 32));
Run Code Online (Sandbox Code Playgroud)
发生了什么(char)(c | 32)
以及如何将相反的方法转换为大写?
这是一个廉价的ASCII技巧,只适用于特定的编码.不推荐.但要回答你的问题,反向操作涉及掩蔽而不是组合:
sb.Append((char)(c & ~32));
Run Code Online (Sandbox Code Playgroud)
在这里,您采用按位反转32
并使用按位AND.这将迫使该单一位关闭并保持其他位置不变.
这样做的原因是因为ASCII字符集的布局使得低5位对于大写和小写字符是相同的,并且仅相差第6位(32
,或00100000b
).使用按位或运算时,将该位加入.当使用反向掩码时,将删除该位.