ASCII 码表(0–127)

完整 ASCII 码表、大小写字母对照与常用速查,附 C/C++ 里判断大小写的写法

ASCII 码表(0–127)

大写字母在前,码值更小:A–Z = 65–90,之后是 a–z = 97–122,小写整体比大写大 32。 两者之间(91–96)夹着 6 个符号:[、\、]、^、_、`(反引号)。


1. 完整码表

行列都是十六进制:码值 = 行 × 16 + 列。

高位 \ 低位0123456789ABCDEF
0x0NULSOHSTXETXEOTENQACKBELBSHTLFVTFFCRSOSI
0x1DLEDC1DC2DC3DC4NAKSYNETBCANEMSUBESCFSGSRSUS
0x2空格!"#$%&'()*+,-./
0x30123456789:;<=>?
0x4@ABCDEFGHIJKLMNO
0x5PQRSTUVWXYZ[\]^_
0x6`abcdefghijklmno
0x7pqrstuvwxyz{|}~DEL

举例:A 在 0x4 行第 1 列 → 4×16+1 = 65;a 在 0x6 行第 1 列 → 6×16+1 = 97。


2. 大小写字母对照

大写码值小写码值大写码值小写码值
A65a97N78n110
B66b98O79o111
C67c99P80p112
D68d100Q81q113
E69e101R82r114
F70f102S83s115
G71g103T84t116
H72h104U85u117
I73i105V86v118
J74j106W87w119
K75k107X88x120
L76l108Y89y121
M77m109Z90z122

每一对差值恒为 32:a - A = 32,b - B = 32 …… z - Z = 32。


3. 常用速查

字符码值字符码值
'0'48'9'57
'A'65'Z'90
'a'97'z'122
空格32'a' - 'A'32

补充:数字 0–9 的码值是连续的 48–57,所以 '7' - '0' 直接得到数值 7。


4. C/C++ 里的用法

char c = 'm';

// 判断小写(下界小、上界大,别写反)
if (c >= 'a' && c <= 'z') { /* ... */ }

// 判断大写
if (c >= 'A' && c <= 'Z') { /* ... */ }

// 小写 -> 大写
if (c >= 'a' && c <= 'z') c -= 32;

// 大写 -> 小写
if (c >= 'A' && c <= 'Z') c += 32;

// 字符数字转真正的数字
int d = '7' - '0';   // d == 7

也可以用 <cctype> 里的现成函数:

#include <cctype>
islower(c);  isupper(c);  isdigit(c);
toupper(c);  tolower(c);

5. 两个常见错误

错误一:区间写反

if (c >= 'z' && c <= 'a')   // 恒假

等价于 c >= 122 && c <= 97,要求一个数同时大于 122 又小于 97,永远不成立。 正确写法是 c >= 'a' && c <= 'z',等价于 97 <= c <= 122。

错误二:把 sizeof 当成字符串长度

for (int p = 1; p < sizeof(m); p++)   // 错,sizeof(string) 恒为 32
for (int p = 1; p < m.size(); p++)    // 对

sizeof 是编译期运算符,算的是类型占多少字节,与内容无关;std::string 的长度要用 m.size()。

相关笔记:数组(一维与二维)

使用 Hugo 构建
主题 Stack 由 Jimmy 设计