ASCII码中大小写字母转换

ASCII中消息字母比大写字母大32, 比如: 'a'对应97, 'A'对应65(97-32=65).

ASCII中大小写字母都是排列有序的, 一般在转换大小写字母时都会基于这个特性.

下边是<ctypes.h>中转换函数的一种实现:

int tolower(int c) {return ( c -'A'+'a');}
int toupper(int c) {return ( c -'a'+'A');}

其实'a'-'A'对应的32刚好是2的幂, 二进制表示为: 00010 0000. ASCII中大小写字母转换只是将32的二进制中唯一的bit为1的数置0或置1. 置0对应减32转换为大写字母, 置1对应加32转换为小写字母.

我们可以用位运算重新实现上面的函数:

int tolower(int c) {return (c ^ 32);}
int toupper(int c) {return (c ^ 32);}

继续观察可以发现32刚好对应ASCII中的空格' ', 因此代码调整为:

int tolower(int c) {return (c ^ ' ');}
int toupper(int c) {return (c ^ ' ');}

在转换单个字母时这样就可以了: c ^= ' '.

转载于:https://my.oschina.net/chai2010/blog/127861

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值