ASCII码和字符转换

作者&投稿:康尹 (若有异议请与网页底部的电邮联系)
~

   本文是基于《编码》、《穿越计算机的迷雾》两部著作进行读后整理的记录性博客。对书中较为重要的内容进行归纳整理进行二次创作,略去了繁琐的讲述细节,力求简明扼要。

  正如我们在前面内容中的介绍一样,对于计算机我们知道它具备存储器能够存储二进制比特信息。但细细一想,我们不禁会产生诸多疑惑。例如,既然计算机存储的都是二进制比特信息,那我们的文本、音视频等多种格式的文件是如何在计算机中存储的呢?计算机为什么能够 “记住” 这些不同类型的信息呢?

  数字计算机中的存储器唯一可以存储的是比特,因此如果要想在计算机上处理信息,就必须把它们按位存储。通过先前的学习,我们已经掌握了如何用比特来表示数字和机器码。现在我们面临的一大挑战就是如何用它来存储文本(本文我们以文本文件为例进行介绍,音视频等文件类似)。

  为了将文本表示为数字形式,我们需要构建一种系统来为每一个字母赋予一个唯一的编码。这和我们前面介绍的一种人机沟通的方式类似,我们要想计算机 “记住” 这些属于我们人类认知的知识,必需定义一种规范——一种双方都能理解的规则。

  简而言之,所有由符号所表示的字母和数字都需要编码。具有这种功能的系统被称为字符编码集(CodedCharacter Set),系统内的每个独立编码称为字符编码(Character Codes)。

  了解了这种思想之后,我们便可以开始实现编码实现字符转换。首先要解决的第一个问题是:构成这些编码究竟需要多少比特?

  如果每个设计计算机的人都构造自己的编码系统,并且独立使用,那么文件的互传互通将困难重重。显而易见的是,我们需要一套统一的规范的编码标准。

  幸运的是,这种标准已经存在并且被广泛使用,它被称为美国信息交换标准码(AmericanStandard Code for InformationInterchange),简称为ASCII 码,发音很像 ASS-key。从 1967 年正式公布至今,它一直是计算机产业中最重要的标准。

  ASCII 码是 7 位编码,它的二进制取值范围为 0000000~1111111,对应于十六进制就是 00h~7Fh。下表列出了其中 32 个字符及相应的十六进制编码(完整对应关系可以查看: ASCII_百度百科 (baidu.com) )。

  有了这种编码方式,我们就可以将字符串转换成 ASCII 码。例如:I am 12 years old.,转换后用十六进制数表示为:49 20 61 6D 20 31 32 20 79 65 61 72 73 20 6F 6C 64 2E。

  ASCII 码对英文字符与二进制之间的关系做了统一的规定,作为 7 位编码 ASCII 码一共规定了 128 个字符。但随之而来的问题是:英语用 128 个符号编码就够了,但是用来表示其他语言,128 个符号显然是不够的。不同国家有着自己的语言系统,也需要这样一套编码方式。显然,如果各个国家自己用自己的,那互通又成了一个繁琐的问题。

  业界一直有一个目标,那就是建立一个独一无二的字符编码系统,它可以用于世界上所有语言文字,从 1988 年开始,几大著名计算机公司合作研究出一种用来替代 ASCII 码的编码系统,取名为 Unicode(统一化字符编码标准)。相对于 ASCII 的 7 位编码,Unicode 采用了 16 位编码,每一个字符需要 2 个字节。也就是说 Unicode 的字符编码范围为 0000h~FFFFh,总共可以表示 65,536 个不同字符。全世界所有的人类语言,尤其是经常出现在计算机通信过程中的语言,都可以使用同一个编码系统,而且这种系统还具备很高的扩展性。

  Unicode 编码其实并不是从零开始设计的,例如前 128 个字符编码——即 0000h~007Fh——与 ASCII 码是一致的。全世界很多标准也被一同收录在 Unicode 中。Unicode 编码整合了部分之前的编码,并进行扩充。

  对于 Unicode 来讲,它唯一的问题,就是它改变了字符与存储空间之间 “单字符,单字节” 的等价对应关系。采用 ASCII 编码方式存储的著作《怒火之花》,其所占据的存储空间约为 1 MB。而如果采用 Unicode 编码,约占 2 MB。为了使编码系统兼容,Unicode 在存储空间上付出了相应的代价。

  随着后续的发展,Unicode 也逐步演化出 UTF-8、UTF-16 等,这里就不展开叙述。

  ASCII 码和字符转换篇介绍了编码的发展以及产生,介绍了ASCII 编码和 Unicode 编码两种编码方式。为了精简内容删减了部分较为详细的书写,仅作为整理总结。




ASCII代码是什么?
SCII码是美国国家信息标准码,用7位二进制数来表示一个字符的编码,所以总共可以表示128个不同的字符。0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(...

ascii码值大小顺序
1、SCII码共128个,其中0~31和127都是不可显示字符,如换行符、回车符等,剩下的32~126都是可显示字符。可显示字符由数字、字母、运算符组成,其中48~57是阿拉伯数字0-9,65~90是26个大写英文字母A-Z,97~122是26个小写英文字母a-z。2、其中,ASCII码最小的是序号0的空字符,最大是序号12...

ASCII码的码长:A.7 B.8 C.12 D.16 该选?谢谢
ASCII码有7位和8位之分,国际通用的ASCII码是7位。

vb keyascii码转字符
Chr("0") 为0的字符 Chr("1")Chr("2")Chr("3")Chr("4")Chr("5")Chr("6")Chr("7") 响铃 Chr("8") 回格 Chr("9") tab(水平制表符)Chr("10") 换行 Chr("11") tab(垂直制表符)Chr("12") 换页 Chr("13") 回车 chr(13)&chr(10) 回车和换行的组合 Chr("14")Chr...

ascii码使用几位二进制数组合来表示128或256种可能的字符?
7位或8位。ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。ASCII 其最高位(b7)用作奇偶校验位。所...

输入一个字符串,内有数字和非数字字符。
digit=*(pstr+i-1)-48;\/\/将单个字符0-9a scII码转换为整数型0-9 数值给digit k=1;\/\/k代表 查找到连续数字的倒数第几个字符串 while(k<j){ e10=1;\/\/e10代表1*10^(次方)for(m=1;m<=k;m++)e10=e10*10;\/\/每个循环*10 digit=digit+(*(pstr+i-1-k)-48)*e10;k++;\/ 比如...

在SCII表,字符“0”~“9”与数值0~9之间编码规律是什么
大小写字母的对应关系是 Asc("a") = Asc("A") + 32 至于数值0~9,我没听说过它们也有ascii码,也没能找到。ascii码对应的应该是字符。

Java中 “字符类型”与“字节类型”的区别是什么?
赋值:byte i = 127;注:byte型在赋值时,一旦超过127或小于-128,则会产生编译错误。char字符类型在内存中占2个字节。表示一个字符,也可以使用A SCII码范围内的值来给char型的变量赋值。由于字符在内存中的取值不存在负数范围,所有取值范围从0到655 35。赋值:char i = 'a'; 或者 char i =...

如何判断是不是全部大写的字符
两种办法,一个是判断ch的SCII码是否位于65——90之间包括65和90;另外一种办法直接用字符比较,看ch是否在'A'~'Z'之间。这两种方法都可以实现判断字符是否为大写字母。

Java中 “字符类型”与“字节类型”的区别
赋值:byte i = 127;注:byte型在赋值时,一旦超过127或小于-128,则会产生编译错误。char字符类型在内存中占2个字节。表示一个字符,也可以使用A SCII码范围内的值来给char型的变量赋值。由于字符在内存中的取值不存在负数范围,所有取值范围从0到655 35。赋值:char i = 'a'; 或者 char i =...

通江县15991576881: Java中,如何把ascii码转换成字符? -
富峡米福: 如果是单个字符的话,直接转换就可以 int d = 97; char e = (char)d;如果是一串ascii码的话,最好存在byte[]中 byte[] b ={97, 98, 99}; System.out.println(new String(b));

通江县15991576881: c++怎么把ascii码输出为字符 -
富峡米福: 思路:先定义字符ch,输入字符,在把字符强制转换成整数就是该字符的ASCII码值,即int(ch). 参考代码: #includeusing namespace std;int main(){ char ch; cin>>ch; cout

通江县15991576881: ascii码表有多少个字符(ascii码表转换)
富峡米福: 1、原理是从文件中一个字节一个字节的读取出来存储为无符号字符型.2、然后以16进制输出下面给一个C语言实现的二进制方式显示文件内容#include typedef unsigned ...

通江县15991576881: C语言中如何把一个字符串转化成其ASCII码的数组?? -
富峡米福: 直接将字符变量赋值给整型变量,即可实现字符到对应ASCII码的转换. 具体实现方法可以参考如下程序段:1 2 3 4 5 6 7 8charstr[]="abds%*&34dfs"; // 定义一个字符数组,存放待转换为ASCII码的字符串 intAsciiNum[20]; // 定义一个整...

通江县15991576881: ASCII和字符/字符串之间是如何转换的? -
富峡米福: 在C中,字符串就是被看作字符数组的,所以是每个字符分别转换的.

通江县15991576881: ASCII与字符间的相互转换如何实现? -
富峡米福: 用二进制编辑器可以转换,在编辑框输入字符,按ctrl+H 就出现ACSII码了 http://www.fjcmw.net/bester/soft.htm

通江县15991576881: 怎样将一组ASCII码值转换成一个字符串 -
富峡米福: 将ASCII码数组遍历转化为字符形式(在数字上加单引号)然后连接并用字符串变量接收

通江县15991576881: ASCII码值转换成字符函数CHR()
富峡米福: chr()函数的用法: y=chr(x) y是一个字符,x是一个整数 它的作用是:把ASCII码值为x的字符转换成相应的字符.

通江县15991576881: C++ ASCII转字符函数 -
富峡米福: #include char* convert(char p[]) { int i=0; while(p[2*i]!='\0'&&p[2*i+1]!='\0') { char c = p[2*i]; if(c<='9') p[i] = (c-'0')<<4; else if(c<='F') p[i] = (c-'A'+10)<<4; else p[i] = (c-'a'+10)<<4; c = p[2*i+1]; if(c<='9') p[i] += (c-'0'); else if(c<='F') p[i] += (c-'A'+10); else p[i]...

通江县15991576881: ASCII码集中各种类型的字符是怎么转换的,举例说明(如'3'如何转换成数字3,'a'换成'A') -
富峡米福: 阿思科码中,数字0-9对应的阿思科码是48-57, 大写字母A~Z 是 65~90,小写字母a~z 是 97~122,

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网