Ascii码 、16进制与 char

        对于一个非计算机专业出身的人,以前只知道计算机中所有的数据都是以二进制形式进行存储,计算,通信的。但是人类文明中,主要的信息展现以文本的形式展现的。如果使用内存中的0和1来表示文本一直都是一个问题,因为每一个人都可以制定自己的编码。这种现象直到ASCII的出现。ASCII统一了数字,字母,符号的二进制编码。
        美国标准ASCII有128个,0-32和127是控制字符或通信字符,如控制符:LF(换行), CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等。通讯专用字符:SOH(头文)、EOT(文尾)、ACK(确认)等。他们没有特定的图形显示,单会依不同的程序,对文本显示有不同的影响。
        33-126是字符,48-57为0-9数字
        65-90为26个大写字母,97-122号为26个小写字母。其余的为一些符号,运算符号。
同时还要注意,标准ASCII的最高位Bit7是一个奇偶校验位。扩展的ASCII有258个,最高位用来确定附加的128个特殊字符,外来字母和图形符号。

    举个例子:看看ASCII  --- ‘A’是如何用二进制表示的 0100 0001  十六进制为:0x41,十进制是65。作为一个程序员大家在VS中经常放在一个字符上的时候,会出现两个值,一个值是ASCII的十进制,一个是ASCII对应的字符。

    现在大家想一个问题,如果在数据传输的过程中,A-->B计算机需要发送"abc"这样的字符串,本质上时发送的abc三个字符对应的ASCII码。如果我们通过串口发送,必须要把’abc‘转化为二进制或者16进制。特别注意:因为一个每个ASCII会对应一个字符(有显示符号的,无显示符号的)。 例如我们想要发送字符串“2D”,许多程序员由于对ASCII理解不到位,因此直接把"2D"当成ASCII的16进制发送了,而实质上发送过去的是:0x3244。因此产生了数据的传输过去后,由于错误的理解,当然会解析错误。

现在明确一点,在电脑屏幕上显示的都是以ASCII对应的字符显示的,而数据的存储,传输,计算在计算机内部都是二进制的形式表示的。

        





posted @ 2016-04-21 16:08  永不停息;  阅读(6423)  评论(0编辑  收藏  举报