posts - 183,  comments - 10,  trackbacks - 0

字符转换函数的实现

第一种方法,利用 ASCII 码大小计算

 1 char mytoupper(char c)
 2 {
 3     if (c >= 'a' && c <= 'z')
 4     {
 5         c += ('A' - 'a');
 6     }
 7     return c;
 8 }
 9 
10 char mytolower(char c)
11 {
12     if (c >= 'A' && c <= 'Z')
13     {
14         c += ('a' - 'A');
15     }
16     return c;
17 }

 


第二种方法,利用位运算
'a' - 'z': 97 - 122
'A' - 'Z': 65 - 90

'a' 与 'A' 正好相差 32 ,即 20x ,0010 0000
大写字母的范围是 0100 0001 - 0101 1010
小些字母的范围是 0110 0001 - 0111 1010

对于大写字母第 5 位都为 0
对于小些字母第 5 为都为 1
可以利用位运算的方法,即对大写字母的第 5 位进行操作,但要保持其他位不变
即利用 MASK = 0010 0000
大写 -> 小写
'a' = 'A' | (0010 0000);

小写 -> 大写
'A' = 'a' & (1101 1111);

这样做也不需要检测,如果本来就是小写,在做 或 操作时,第 5 位不变,维持 1
如果本来就是大写,在做 与操作时,第 5 位还是不变,维持 0

1 char mytoupper(char c)
2 {
3     return c & (0xDF);
4 }
5 
6 char mytolower(char c)
7 {
8     return c | (0x20);
9 }

 

http://www.cppblog.com/qinqing1984/archive/2011/06/25/149427.html

posted on 2011-06-25 18:24 unixfy 阅读(95) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理