> 文章列表 > 【C】字母大写转换为小写的优雅写法

【C】字母大写转换为小写的优雅写法

【C】字母大写转换为小写的优雅写法

大写字母转换为小写字母可以使用C标准库函数tolower。它的函数原型如下:
int tolower(int c);
tolower函数的实现可以在C标准库头文件<ctype.h>中找到。一般情况下,这个函数会被定义为一个宏,用来根据不同的字符编码(如ASCII码、Unicode等)将大写字母转换为小写字母。

普通写法:

#define tolower_p(c) ((c >= 'A' && c <= 'Z') ? (c + 'a' - 'A') : c)

在这个宏定义中,如果输入的字符c是大写字母,则通过与字符’a’和’A’之间的差值计算出该大写字母对应的小写字母,并返回它的ASCII码值;否则直接返回c的ASCII码值。

优雅写法:

#define tolower_y(c) ((c >= 'A' && c <= 'Z') ? c ^ 0x20 : c)

异或0x20即可

附ASCII码表
列出了ASCII码值从0到127之间的全部128个字符,包括控制字符、数字、字母、符号等。每行显示4个字符对应的ASCII码值和字符本身

ASCII码 字符 ASCII码 字符 ASCII码 字符 ASCII码 字符
0 NUL 32 (space) 64 @ 96 `
1 SOH 33 ! 65 A 97 a
2 STX 34 " 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DC1 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 ETB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 y
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 \\ 124
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 ~
31 US 63 ? 95 _ 127 DEL