字符与字符串的表示(ASCII字符,Unicode码,字符串)
2013-03-13 15:36
337 查看
非数值数据,通常指的是字符、字符串、图形符号、汉字等数据,它们并不用来表示数值的大小,一般情况下也不对它们进行算术运算。
1. ASCII字符
由于计算机内部只能识别和处理二进制代码,所以字符必须按照一定的规则用一组二进制编码来表示。
字符编码方式有很多种,美国国家标准局(ANSI)制定的ASCII(American Standard Code for Information Interchange,美国信息交换标准码)是现今最为通用的单字节编码系统,它主要用于显示现代英文字母和符号,已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。
ASCII字符编码表如表2-3所示,表中的横轴为7位ASCII码高3位b6b5b4的二进制表示,纵轴为ASCII码低4位b3b2b1b0的二进制表示,括号中的数字为对应的十六进制表示。
表2-3 ASCII字符编码表
ASCII码用7位二进制编码(0~127)表示一个字符,总共可以表示128个字符,其中有95个是可显示和打印的字符,包括10个十进制数字(0~9)、52个英文大写和小写字母(A~Z,a~z)、以及若干个运算符和标点符号,除此之外的33个字符是不可显示和打印的控制符号,原先用于控制计算机外围设备的某些工作特性,现在多数已被废弃。
计算机通常用一个字节(8位)来存放一个ASCII字符,字节的低7位表示不同的ASCII字符,而字节的最高1位固定为0。在有些情况下,字节的最高1位也可以用作奇偶校验位以检验错误,或用作西文字符和汉字的区分标识。
除了使用字节最高位为0的标准ASCII码(0~127)之外,通过使用字节最高位为1的另外128个编码(128~255),许多公司和组织还自行定义了不少互不兼容的扩展ASCII码系统。扩展ASCII码用8位二进制表示一个字符,总共可以表示256个不同的字符。
2. Unicode码
现今人类使用了接近6800种不同的语言,即使是扩展ASCII码这类8位代码也不能满足需要。解决问题的最佳方案是设计一种全新的编码方法,而这种方法必须有足够的能力来容纳全世界所有语言中任意一种语言的所有符号,这就是Unicode(统一码)。Unicode为每种语言中的每个字符设定了统一并且惟一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
目前实际应用的Unicode对应于UCS-2(2-byte Universal Character Set,2字节通用字符集),每个字符占用2个字节,使用16位的编码空间,理论上允许表示216=65536个字符,可以基本满足各种语言的使用需要。实际上目前版本的Unicode尚未填充满这16位编码,从而为特殊的应用和将来的扩展保留了大量的编码空间。这个编码空间已经非常大了,但设计者考虑到将来某一天它可能也会不够用,所以又定义了UCS-4编码,每个字符占用4个字节(实际上只用了31位,最高位必须为0),理论上可以表示231=2
147 483 648个字符。
在PC机中,若使用扩展ASCII码、Unicode UCS-2和UCS-4方法分别表示一个字符,则三者之间的差别为:扩展ASCII码用8位表示,Unicode UCS-2用16位表示,Unicode UCS-4用32位表示。
3. 字符串
字符串是指连续的一串字符,它们通常占用主存中连续的多个字节,每个字节存放一个字符(以ASCII字符为例)。当主存字由2个或4个字节组成时,在同一个主存字中,既可按从低位字节向高位字节的顺序存放字符串的内容,也可按从高位字节向低位字节的顺序存放字符串的内容。这两种存放方式都是常用方式,不同的计算机可以选用其中的任何一种。
例如下列字符串:
IF└┘A>=B└┘THEN└┘READ(C)
可以按图2-4所示从高位字节到低位字节依次存放在主存中。图中,主存单元长度是4个字节,每个字节中存放相应字符的ASCII值,文字表达式中的空格“└┘”在主存中也占一个字节的位置。因此,每个字节分别存放十六进制的49、46、20、41、3E、3D、42、20、54、48、45、4E、20、52、45、41、44、28、43、29。
转载自:http://share.onlinesjtu.com/mod/tab/view.php?id=180
1. ASCII字符
由于计算机内部只能识别和处理二进制代码,所以字符必须按照一定的规则用一组二进制编码来表示。
字符编码方式有很多种,美国国家标准局(ANSI)制定的ASCII(American Standard Code for Information Interchange,美国信息交换标准码)是现今最为通用的单字节编码系统,它主要用于显示现代英文字母和符号,已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。
ASCII字符编码表如表2-3所示,表中的横轴为7位ASCII码高3位b6b5b4的二进制表示,纵轴为ASCII码低4位b3b2b1b0的二进制表示,括号中的数字为对应的十六进制表示。
表2-3 ASCII字符编码表
ASCII码用7位二进制编码(0~127)表示一个字符,总共可以表示128个字符,其中有95个是可显示和打印的字符,包括10个十进制数字(0~9)、52个英文大写和小写字母(A~Z,a~z)、以及若干个运算符和标点符号,除此之外的33个字符是不可显示和打印的控制符号,原先用于控制计算机外围设备的某些工作特性,现在多数已被废弃。
计算机通常用一个字节(8位)来存放一个ASCII字符,字节的低7位表示不同的ASCII字符,而字节的最高1位固定为0。在有些情况下,字节的最高1位也可以用作奇偶校验位以检验错误,或用作西文字符和汉字的区分标识。
除了使用字节最高位为0的标准ASCII码(0~127)之外,通过使用字节最高位为1的另外128个编码(128~255),许多公司和组织还自行定义了不少互不兼容的扩展ASCII码系统。扩展ASCII码用8位二进制表示一个字符,总共可以表示256个不同的字符。
2. Unicode码
现今人类使用了接近6800种不同的语言,即使是扩展ASCII码这类8位代码也不能满足需要。解决问题的最佳方案是设计一种全新的编码方法,而这种方法必须有足够的能力来容纳全世界所有语言中任意一种语言的所有符号,这就是Unicode(统一码)。Unicode为每种语言中的每个字符设定了统一并且惟一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
目前实际应用的Unicode对应于UCS-2(2-byte Universal Character Set,2字节通用字符集),每个字符占用2个字节,使用16位的编码空间,理论上允许表示216=65536个字符,可以基本满足各种语言的使用需要。实际上目前版本的Unicode尚未填充满这16位编码,从而为特殊的应用和将来的扩展保留了大量的编码空间。这个编码空间已经非常大了,但设计者考虑到将来某一天它可能也会不够用,所以又定义了UCS-4编码,每个字符占用4个字节(实际上只用了31位,最高位必须为0),理论上可以表示231=2
147 483 648个字符。
在PC机中,若使用扩展ASCII码、Unicode UCS-2和UCS-4方法分别表示一个字符,则三者之间的差别为:扩展ASCII码用8位表示,Unicode UCS-2用16位表示,Unicode UCS-4用32位表示。
3. 字符串
字符串是指连续的一串字符,它们通常占用主存中连续的多个字节,每个字节存放一个字符(以ASCII字符为例)。当主存字由2个或4个字节组成时,在同一个主存字中,既可按从低位字节向高位字节的顺序存放字符串的内容,也可按从高位字节向低位字节的顺序存放字符串的内容。这两种存放方式都是常用方式,不同的计算机可以选用其中的任何一种。
例如下列字符串:
IF└┘A>=B└┘THEN└┘READ(C)
可以按图2-4所示从高位字节到低位字节依次存放在主存中。图中,主存单元长度是4个字节,每个字节中存放相应字符的ASCII值,文字表达式中的空格“└┘”在主存中也占一个字节的位置。因此,每个字节分别存放十六进制的49、46、20、41、3E、3D、42、20、54、48、45、4E、20、52、45、41、44、28、43、29。
转载自:http://share.onlinesjtu.com/mod/tab/view.php?id=180
相关文章推荐
- 将ascii表示的字符转换为String(字符串)类型
- 计算机中字符的二进制编码表示(ASCII)
- java实现10进制转换为英文字符表示的26进制,得到唯一自增的英文字符串序列。
- C++字符串之一(字符表示)
- 将十六进制字符串转化成ascii字符
- 字符串各个字符ASCII值加5
- 二者都是将 byte[] 转换成字符串,一个区别在于 Convert.ToBase64String 使用 base 64 数字编码,所以它生成的全部是 ASCII 字符。
- 取出字符串的某一位用ASCII修改为其他字符
- 100.字符串中奇数位置字符和ASCII为偶数的字符放在字符数组t中
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
- c/c++生成不重复的字符串(6个字符组成,可表示的个数可以扩充),简易版数据库主键
- 任意输入一个字符串,将其中的字符按ASCII码值从小到大重新排序
- 33.将字符串中下标位置为奇数的字符按照ascII从小到大排序输出。
- mybatis if test 字符串和字符的表示
- 在printf的格式化字符串中怎么表示一个%字符
- 《算法导论》11.3-3解答——k为按基数2^p表示的字符串。试证明:如果串x可由串y通过其自身的字符置换排列导出,则x和y具有相同的散列值。
- 字符串得到其unicode码的二进制表示(字符串显示),反过来亦可
- echo:打印一串字符。字符串连接符是用点(.)来表示的
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字
- 用指针存储字符数组表示字符串