[参考]ASCII对照表及字符与⼆进制、⼗进制、16进制之间的
转化(CC++)
第1节 ASCII码对照表
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字母的⼀套电脑编码系统。它主要⽤于显⽰现代英语和其他西欧语⾔。它是现今最通⽤的单字节编码系统,并等同于国际标准ISO/IEC 646。
ASCII第⼀次以规范标准的型态发表是在1967年,最后⼀次更新则是在1986年,⾄今为⽌共定义了128个字符,其中33个字符⽆法显⽰(这是以现今操作系统为依归,但在DOS模式下可显⽰出⼀些诸如笑脸、扑克牌花式等8-bit符号),且这33个字符多数都已是陈废的控制字符,控制字符的⽤途主要是⽤来操控已经处理过的⽂字,在33个字符之外的是95个可显⽰的字符,包含⽤键盘敲下空⽩键所产⽣的空⽩字符也算1个可显⽰字符(显⽰为空⽩)。
1.1 ASCII控制字符
⼆进制⼗进制⼗六进制缩写名称/意义
0000 0000000NUL空字符(Null)
0000 0001101SOH标题开始
0000 0010202STX本⽂开始
0000 0011303ETX本⽂结束
0000 0100404EOT传输结束
0000 0101505ENQ请求
0000 0110606ACK确认回应
0000 0111707BEL响铃
0000 1000808BS退格
0000 1001909HT⽔平定位符号html符号代码对照表
0000 1010100A LF换⾏键
0000 1011110B VT垂直定位符号
0000 1100120C FF换页键
0000 1101130D CR归位键
0000 1110140E SO取消变换(Shift out)
0000 1111150F SI启⽤变换(Shift in)
0001 00001610DLE跳出数据通讯
0001 00011711DC1设备控制⼀(XON 启⽤软件速度控制)
0001 00101812DC2设备控制⼆
0001 00111913DC3设备控制三(XOFF 停⽤软件速度控制)
0001 01002014DC4设备控制四
0001 01012115NAK确认失败回应0001 01102216SYN同步⽤暂停0001 01112317ETB区块传输结束0001 10002418CAN取消0001 10012519EM连接介质中断0001 1010261A SUB替换0001 1011271B ESC跳出0001 1100281C FS⽂件分割符0001 1101291D GS组分隔符0001 1110301E RS记录分隔
符0001 1111311F US单元分隔符0111 11111277F DEL删除1.2 ASCII可显⽰字符
⼆进制⼗进
制
⼗六进制图形⼆进制
⼗进
制
⼗六进制图形⼆进制⼗进制⼗六进制图形
0010 00003220(空格)
0100
0000
6440@
0110
0000
9660`
0010 00013321!
0100
0001
6541A
0110
0001
9761a
0010 00103422"
0100
0010
6642B
0110
0010
9862b
0010 00113523#
0100
0011
6743C
0110
0011
9963c
0010 01003624$
0100
0100
6844D
0110
0100
10064d
0010 01013725 %
0100
0101
6945E
0110
0101
10165e
0010 01103826&
0100
0110
7046F
0110
0110
10266f
0010 01113927'0100
0111
7147G0110
0111
10367g
0010 10004028(
0100
1000
7248H
0110
1000
10468h
0010 10014129)
0100
1001
7349I
0110
1001
10569i
0010 1010422A*
0100
1010
744A J
0110
1010
1066A j
101010101010
0010 1011432B+
0100
1011
754B K
0110
1011
1076B k
0010 1100442C,
0100
1100
764C L
0110
1100
1086C l
0010 1101452D-
0100
1101
774D M
0110
1101
1096D m
0010 1110462E.
0100
1110
784E N
0110
1110
1106E n
0010 1111472F/
0100
1111
794F O
0110
1111
1116F o
0011 000048300
0101
0000
8050P
0111
0000
11270p
0011 000149311
0101
0001
8151Q
0111
0001
11371q
0011 001050322
0101
0010
8252R
0111
0010
11472r
0011 001151333
0101
0011
8353S
0111
0011
11573s
0011 010052344
0101
0100
8454T
0111
0100
11674t
0011 010153355
0101
0101
8555U
0111
0101
11775u
0011 011054366
0101
0110
8656V
0111
0110
11876v
0011 011155377
0101
0111
8757W
0111
0111
11977w
0011 100056388
0101
1000
8858X
0111
1000
12078x
0011 100157399
0101
1001
8959Y
0111
1001
12179y
0011
1010583A:0101
1010905A Z
0111
10101227A z
0011 1011593B;
0101
1011
915B[
0111
1011
1237B{
0011 1100603C<
0101
1100
925C\
0111
1100
1247C|
0011 1101613D=
0101
1101
935D]
0111
1101
1257D}
0011 1110623E>
0101
1110
945E^
0111
1110
1267E~
0011 1111633F?
0101
1111
955F_
第2节字符的进制转换
2.1 获取字符(8位)的上四位和下四位
举例1:字符‘a’,它对应的⼆进制(或称ASCII码)为0110 0001,该⼆进制的上四位为0110,下四位为0001,这两个⼆进制对应的⼗六进制为6和1。
举例2:字符‘d’,它对应的⼆进制(或称ASCII码)为0110 0100,该⼆进制的上四位为0110,下四位为0100,这两个⼆进制对应的⼗六进制为6和4。
源代码:
#include<iostream>
// 核⼼函数
unsigned char* Char2(unsigned char ch){
static unsigned char szHex[2];
szHex[0] = ch/16;
szHex[1] = ch%16;
return &szHex[0];
}
// 调试部分
void main (){
unsigned char* char_buff;
char_buff = Char2('a');
system("pause");
}
由于⼆进制不好输出,这⾥通过调试查看char_buff的结果:字符’o’的上四位a=’\x6’,下四位b=’\xf’。其中\x表⽰16进制,也就是说a的16进制数为6,b的⼗六进制数为f,各⾃对应的⼗进制数为6和15。
2.2 获取字符(上表中的‘图形’)所对应的⼗六进制字符
举例3:(续例1)字符‘a’,它对应的16进制为61,若要在屏幕输出两个字符6和1,需要将‘a’转化为两个字符,这两个字符
的ASCII码为0011 0110,0011 0001。
举例4:字符‘o’,它对应的16进制为6F,若要在屏幕输出两个字符6和F,需要将‘o’转化为两个字符,这两个字符的ASCII码
为0011 0110,0100 0110。
#include<iostream>
#include<stdlib.h>
using namespace std;
unsigned char* Char2Hex(unsigned char ch){
unsigned char byte[2],i;
static unsigned char szHex[2];
byte[0] = ch/16; // 获得ch字符(8位)的上四位
byte[1] = ch%16; // 获得ch字符(8位)的下四位
for(i=0; i<2; i++){
if(byte[i] >= 0 && byte[i] <= 9)
szHex[i] = '0' + byte[i];
else
szHex[i] = 'a' + byte[i] - 10;
}
return &szHex[0];
}
void main (){
unsigned char* char_buff;
char_buff = Char2Hex('o');
cout<<char_buff[0]<<endl;
cout<<char_buff[1]<<endl;
system("pause");
}
输出结果:
2.3 获取字符对应的⼗六进制字符的第⼆种⽅法(傻⽠式)
根据2.1节的获取8进制字符的上4位、下4位的⽅法,我联想到了⼀个新的⽅法来获取其16进制的字符。结果同2.2节,但原理很简单:
举例5:字符‘o’,它的ASCII码为0110 1111,上四位0110,下四位1111,这两个⼆进制对应的⼗进制分别为6和15。只需
将6和15通过⼀个unsigned char数组进⾏映射即可获得两个字符6和F。
这个unsigned char数组的构造为:char_map[17] = "0123456789ABCDEF"; 具体代码如下。结果与2.2节⼀致。
#include<iostream>
#include<stdlib.h>
using namespace std;
// ⽤⼀个字符数组做映射
unsigned char char_map[17] = "0123456789ABCDEF";
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论