ASCII码

       ASCII码英文全称America Standard Code for Information Interchange,中文意思:美国信息交换标准码。它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。ASCII码于1968年提出,用于在不同计算机硬件和软件系统中实现数据传输标准化,在大多数的小型机和全部的个人计算机都使用此码。ASCII码划分为两个集合:128个字符的标准ASCII码和附加的128个字符的扩展ASCII码。

因为1位二进制数可以表示2种状态:0、1;而2位二进制数可以表示4种状态:00、01、10、11;依次类推,7位二进制数可以表示128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。所以,7位ASCII码是用七位二进制数进行编码的,可以表示128个字符,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等;
通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;

第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。 

绝大多数计算机的一个字节是8位,取值范围是0~255,而ASCII码并没有规定编号为128~255的字符,为了能表示更多字符,各厂商制定了很多种ASCII码的扩展规范。注意,虽然通常把这些规范称为扩展ASCII码(Extended ASCII),但其实它们并不属于ASCII码标准。例如以下这种扩展ASCII码由IBM制定,在字符终端下被广泛采用,其中包含了很多表格边线字符用来画界面。

在图形界面中最广泛使用的扩展ASCII码是ISO-8859-1,也称为Latin-1,其中包含欧洲各国语言中最常用的非英文字母,但毕竟只有128个字符,某些语言中的某些字母没有包含。如下表所示(编号为128~159的是一些控制字符,表中没有列出):

在自己的DEV下调试下面这个程序:

 

 

 

 

 

 

 

ASCII表Bin Dec Hex 缩写字符 解释 0000 0000 0 00 NUL (null) 空字符 0000 0001 1 01 SOH (start of handing) 标题开始 0000 0010 2 02 STX (start of text) 正文开始 0000 0011 3 03 ETX (end of text) 正文结束 0000 0100 4 04 EOT (end of transmission) 传输结束 0000 0101 5 05 ENQ (enquiry) 请求 0000 0110 6 06 ACK (acknowledge) 收到通知 0000 0111 7 07 BEL (bell) 响铃 0000 1000 8 08 BS (backspace) 退格 0000 1001 9 09 HT (horizontal tab) 水平制表符 0000 1010 10 0A LF (NL line feed, new line) 换行键 0000 1011 11 0B VT (vertical tab) 垂直制表符 0000 1100 12 0C FF (NP form feed, new page) 换页键 0000 1101 13 0D CR (carriage return) 回车键 0000 1110 14 0E SO (shift out) 不用切换 0000 1111 15 0F SI (shift in) 启用切换 0001 0000 16 10 DLE (data link escape) 数据链路转义 0001 0001 17 11 DC1 (device control 1) 设备控制1 0001 0010 18 12 DC2 (device control 2) 设备控制2 0001 0011 19 13 DC3 (device control 3) 设备控制3 0001 0100 20 14 DC4 (device control 4) 设备控制4 0001 0101 21 15 NAK (negative acknowledge) 拒绝接收 0001 0110 22 16 SYN (synchronous idle) 同步空闲 0001 0111 23 17 ETB (end of trans. block) 传输块结束 0001 1000 24 18 CAN (cancel) 取消 0001 1001 25 19 EM (end of medium) 介质中断 0001 1010 26 1A SUB (substitute) 替补 0001 1011 27 1B ESC (escape) 溢出 0001 1100 28 1C FS (file separator) 文件分割符 0001 1101 29 1D GS (group separator) 分组符 0001 1110 30 1E RS (record separator) 记录分离符 0001 1111 31 1F US (unit separator) 单元分隔符
ASCII表是字符编的基础,它将字符集映射到对应的数值。ASCII最初设计为7,因此理论上可以表示128个不同的字符。这些字符包括大小写英文字母、数字、标点符号以及控制字符[^1]。 在实际应用中,ASCII通常使用8二进制进行编,用于表示控制字符、英文字符、数字字符。因为使用8二进制编,所以ASCII只能表示256个字符,编号范围为0~255。常用的ASCII如下:表示字符十六进制形式十进制形式0~9 0x30~0x39 48~57 A~Z 0x41~0x5A 65~90 a~z 0x61~0x7A 97~122 [^2]。 需要注意的是,只要是中文字符都变成了“63”,ASCII为63的字符是“?”。出现这个问题的原因是因为ASCII表不支持中文字符,因此将中文字符转换成Ascii或ISO-8859-1表对应的字节数组时,中文字符都会被转换成63(默认缺失值),导致了乱或中文丢失!从String的getBytes()方法的源分析可知,只要目标表不支持的字符都会被63替换!因此我们要避免转换成字符不支持的编字节数组[^3]。 下面是一个简单的ASCII对照表: | 字符 | 十六进制 | 十进制 | |------|----------|--------| | 0 | 0x30 | 48 | | 1 | 0x31 | 49 | | 2 | 0x32 | 50 | | 3 | 0x33 | 51 | | 4 | 0x34 | 52 | | 5 | 0x35 | 53 | | 6 | 0x36 | 54 | | 7 | 0x37 | 55 | | 8 | 0x38 | 56 | | 9 | 0x39 | 57 | ### ASCII的应用 ASCII广泛应用于计算机科学和信息技术领域,尤其是在早期的计算机系统中。由于其简单性和通用性,ASCII成为了国际标准,使得不同计算机系统之间能够互相通信。然而,随着全球化的发展,ASCII的局限性也逐渐显现出来,尤其是对于非英语语言的支持不足。为此,后来发展出了多种扩展ASCII版本和其他多语言标准,如Unicode。 ### 示例代 下面是一个简单的Python程序,用于打印出ASCII表中的所有可打印字符: ```python for i in range(32, 127): print(f"Decimal: {i}, Hex: {hex(i)}, Char: {chr(i)}") ``` 这段代会输出从空格(ASCII32)到波浪线(ASCII126)的所有可打印字符及其对应的十进制和十六进制值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值