ASCII 码表完全指南:0-127 控制字符与十进制十六进制对照
从 0 到 127 看懂 ASCII 表:控制字符与可打印字符怎么分,十进制十六进制二进制怎么换算,A 等于 65、a 等于 97、数字 0 从 48 起,这些字符码在编程里到底干什么用。
ASCII 码表完全指南:0-127 控制字符与十进制十六进制对照
写代码越久,越会发现自己经常回头查同一张表。一段十六进制 dump、一个跨平台换行符的 bug、一个正则字符类里要写的字节,绕来绕去都落到 ASCII 这 128 个码位上。这篇把这张表讲清楚:它怎么排,控制字符和可打印字符的分界在哪,常用字符码该记哪几个,以及它们在实际编程里怎么用。
ASCII 是什么,为什么只有 128 个
ASCII 全称 American Standard Code for Information Interchange,1963 年由美国标准协会发布,用 7 个二进制位给字符编号,所以总共 2 的 7 次方等于 128 个码位,编号从 0 到 127,一个都不多。这就是为什么标准 ASCII 永远停在 127:第 8 位在原始标准里要么留作校验,要么干脆不用。今天说的 "扩展 ASCII"(128 到 255)其实没有唯一标准,Latin-1、Windows-1252、代码页 437 各说各话,这点后面会提。
我自己第一次真正理解这张表,是在调一个串口设备时被逼出来的。当时屏幕上只有一串裸字节,没有任何字符显示,只能对着码表一个个翻,翻着翻着结构就刻进脑子里了。
控制字符(0-31)和 DEL(127)
0 到 31 这 32 个码位加上末尾的 127,合起来 33 个,都是控制字符。它们不显示成字形,而是发指令。其中一批今天仍然天天在跑:
- LF(10,
\n)换行,Unix 和 macOS 用它单独表示换行。 - CR(13,
\r)回车,光标回到行首。 - TAB(9)缩进。
- ESC(27)是每一段终端颜色和光标移动序列的开头。
- NUL(0)是 C 字符串的结束符。
- BEL(7)今天仍能让终端响铃。
剩下那批传输控制码(SOH、STX、ETX、ACK、NAK 等)主要活在串口协议和老旧工业设备里。顺带解开一个常见疑惑:Ctrl+C 对应的是 ETX(3),Ctrl+S 会冻住终端是因为它发的是 XOFF。要把任意码位的二进制位拆开看,可以用 /zh/t/text-to-binary/ 把字符直接转成八位二进制对照。
可打印字符(32-126)与几个该背的码值
32 到 126 是能看见的字符,从空格开始,到波浪号 ~ 结束。这一段有几个码值值得记死:
- 空格是 32。
- 数字
0是 48,所以'0'到'9'是 48 到 57,把字符减去 48 就得到它代表的数字。 - 大写
A是 65,十六进制写作0x41。 - 小写
a是 97。
这里有个很优雅的细节:A(65)和 a(97)正好差 32,而 32 是 2 的 5 次方,也就是第 6 位。所以大小写转换在底层就是翻转那一位,这也是为什么很多老代码用 c ^ 0x20 来切换大小写。把这条记住,面试里被问 "'A' 的 ASCII 码是多少" 就再也不会卡壳。
十进制 / 十六进制 / 二进制怎么对照
同一个字符可以用多种进制写。还是拿大写 A 举例,它在四种常见进制里分别是:十进制 65,十六进制 0x41,八进制 0o101,二进制 01000001。在代码里互转也很直接:
- JavaScript:
"A".charCodeAt(0)得到 65,String.fromCharCode(65)得到"A",(65).toString(16)得到"41"。 - Python:
ord("A")得到 65,chr(65)得到"A"。
把十进制、十六、八、二进制并排放着看,进制转换会从死记硬背变成直觉。需要在任意进制之间换算更大的数时,可以配合 /zh/t/base-converter/ 一起用。
这张表在编程里到底解决什么问题
说几个我反复遇到的真实场景。其一,读 xxd 的十六进制 dump:看到 0x48 0x49 0x0A,逐个对照就是 H、I、LF,三十秒手解出 "HI\n",顺便确认设备用的是裸 LF 而不是 CR+LF。其二,排查换行符 bug:Linux CI 报 bad interpreter: /bin/bash^M,查一下 CR 是 13、是那个肉眼可见的 ^M,用 dos2unix 去掉就好。其三,写分词器或 CSV 解析器时要对具体字节较真,分隔符到底是 TAB(9)还是 US(31),查清码值再丢进 charCodeAt 或正则字符类,心里就有底。
这 128 个码位是几乎所有现代文本编码的地基,UTF-8 的前 128 个码位就和 ASCII 完全一致。把这张表彻底吃透,后面遇到的多数 "乱码" 和 "换行符" 问题都会变成显而易见的小事。完整可搜索的码表在 /zh/t/ascii-table-reference/,输入 65、0x41 或字符本身都能跳到对应行,点任意值即可复制。
Made by Toolora · Updated 2026-06-13