你敲下键盘上的对照“A”,屏幕上跳出“A”,表完但计算机看到的整版其实是一串二进制——01000001。这就是对照ASCII码干的事:把字母、数字、表完符号翻译成机器能懂的整版编号。它诞生于1963年,对照当时美国佬为了让不同厂家的表完电报机、电脑能互相通信,整版硬是对照统一了128个字符的编码。今天你用的表完每一个英文字母,背后都站着这张老掉牙的整版表。
先看最关键的对照部分:0到127,一个不多一个不少。表完0到31是整版控制字符,它们不可见,但干着最脏最累的活。比如10是换行,13是回车——你写代码时按的Enter键,其实就是同时发了这两个信号(Windows系统)或者只发10(Linux/Mac)。9是水平制表符,也就是Tab键,它能让文本对齐,但缩进几个空格取决于编辑器设置,经常坑到新手。
32到126才是你真正看得见的“可见字符”。32是空格,别小看它,字符串里它最常用。48到57是数字0到9,65到90是大写字母A到Z,97到122是小写字母a到z。注意一个细节:大写A是65,小写a是97,差值正好32。所以大小写转换的代码技巧就是加减32,比如JavaScript里`charCode`一减就完事。
剩下的标点符号和运算符分布得挺乱。33是感叹号,64是@符号,91到96是`[ \ ] ^ _ `这几个冷门货,123到126是`{ | } ~`。你要是写正则表达式,肯定被这些编码折磨过——转义字符`\`本身是92,在字符串里写`"\\"`才能表示一个反斜杠,这破规则让无数人调试到半夜。
但ASCII有个致命短板:它只有128个位置,根本装不下法语的重音字母、德语变音、更别提中文日文。于是后来搞出了扩展ASCII(128到255),但各家厂商自己乱加符号,导致互不兼容。欧洲人用拉丁-1编码能正常显示é,换到另一台机器就变乱码。这就是为什么你现在看到网页乱码时会怀念ASCII——至少它永远不会翻车。
说个实际的坑:你在写网络协议或者文件格式时,经常要处理ASCII码。比如HTTP请求头里,换行必须是CRLF(回车+换行,即13和10),如果你只发10,服务器可能直接返回400错误。还有,解析二进制文件时,判断一个字节是不是ASCII字符,只需检查它是否小于128——这招在C语言里天天用,`if (c & 0x80)`就能区分ASCII和扩展字符。
最后给你一份速查心法:数字0是48,大写A是65,小写a是97,空格是32,换行是10。记住这四个锚点,其他字符都能推算出来——比如大写G就是65+6=71,小写z是97+25=122。别背表,背规律。ASCII的美丽恰恰在于它的简单:127个字符,每个都占7位二进制,加上校验位凑成8位,就构成了现代计算机存储的最小单位——字节。
这张表已经活了六十年,今天依然统治着键盘输入、网络协议、文件格式。下次你看到乱码,八成不是ASCII的锅,而是它的表兄弟们(UTF-8、GBK)在打架。但要说基础,还得是这128个老伙计。