gpt4 book ai didi

使用位运算符转换为大写

转载 作者:太空狗 更新时间:2023-10-29 16:12:23 28 4
gpt4 key购买 nike

您好,我有一个将字符转换为大写的函数,但不理解这行代码 *src & = ~0x20

完整代码如下

void upper_case(char *src)
{
while (*src != '\0')
{
if (islower(*src))
*src &= ~0x20;
src++;
}
}

谢谢

最佳答案

这是一个 ASCII 解决方案,从小写字符的整数值中减去 32,等于它的大写字母。

它不适用于所有字符集/编码。如果你的环境/语言环境是“C”语言环境,或“En_US”,这将起作用,否则可能不是因为不是每个字符集都有 0x20 (32) 大小写之间的关系,也没有大写或小写的概念案例。

就此而言,即使使用 ASCII,由于重音字符和其他问题,islower() 也不是安全检查(我看到 Ray Chen 刚刚在评论中指出)。我会改用

if(ch >= 'a' && ch <= 'z')   // this == islower() in "C" locale, but not others

限制集合以避免重音字符。 islower() 不保证 -32 会大写。

无论如何,这是“老办法”,遗憾的是,它已经取代了许多其他“简单”技巧和假设,例如 .txt 表示 ASCII。

查看 http://blogs.msdn.com/b/oldnewthing/archive/2007/04/17/2158334.aspx有趣的阅​​读。

关于使用位运算符转换为大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481483/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com