[参考]ASCII对照表 及 字符与二进制、十进制、16进制之间的转化(C/C++)

1ASCII码对照表...1

1.1 ASCII控制字符...1

1.2 ASCII可显示字符...1

2字符的进制转换...1

2.1获取字符(8位)的上四位和下四位...1

2.2获取字符(上表中的图形)所对应的十六进制字符...1

2.3获取字符对应的十六进制字符的第二种方法(傻瓜式)...1

2.4递归的方法获取字符对应的二进制字符...1

第1节ASCII码对照表

ASCIIAmerican Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646

ASCII第一次以规范标准的型态发表是在1967年,最后一次更新则是在1986年,至今为止共定义了128个字符,其中33个字符无法显示(这是以现今操作系统为依归,但在DOS模式下可显示出一些诸如笑脸、扑克牌花式等8-bit符号),且这33个字符多数都已是陈废的控制字符,控制字符的用途主要是用来操控已经处理过的文字,在33个字符之外的是95个可显示的字符,包含用键盘敲下空白键所产生的空白字符也算1个可显示字符(显示为空白)。

1.1ASCII控制字符

**二进制** **十进制** **十六进制** **缩写** **名称/意义**
0000 0000 0 00 NUL 空字符(Null
0000 0001 1 01 SOH 标题开始
0000 0010 2 02 STX 本文开始
0000 0011 3 03 ETX 本文结束
0000 0100 4 04 EOT 传输结束
0000 0101 5 05 ENQ 请求
0000 0110 6 06 ACK 确认回应
0000 0111 7 07 BEL 响铃
0000 1000 8 08 BS 退格
0000 1001 9 09 HT 水平定位符号
0000 1010 10 0A LF 换行键
0000 1011 11 0B VT 垂直定位符号
0000 1100 12 0C FF 换页键
0000 1101 13 0D CR 归位键
0000 1110 14 0E SO 取消变换(Shift out
0000 1111 15 0F SI 启用变换(Shift in
0001 0000 16 10 DLE 跳出数据通讯
0001 0001 17 11 DC1 设备控制一(XON启用软件速度控制)
0001 0010 18 12 DC2 设备控制二
0001 0011 19 13 DC3 设备控制三(XOFF停用软件速度控制)
0001 0100 20 14 DC4 设备控制四
0001 0101 21 15 NAK 确认失败回应
0001 0110 22 16 SYN 同步用暂停
0001 0111 23 17 ETB 区块传输结束
0001 1000 24 18 CAN 取消
0001 1001 25 19 EM 连接介质中断
0001 1010 26 1A SUB 替换
0001 1011 27 1B ESC 跳出
0001 1100 28 1C FS 文件分割符
0001 1101 29 1D GS 组群分隔符
0001 1110 30 1E RS 记录分隔符
0001 1111 31 1F US 单元分隔符
0111 1111 127 7F DEL 删除

1.2ASCII可显示字符

**二进制** **十进制** **十六进制** **图形** **二进制** **十进制** **十六进制** **图形** **二进制** **十进制** **十六进制** **图形**
0010 0000 32 20 (空格) 0100 0000 64 40 @ 0110 0000 96 60 `
0010 0001 33 21 ! 0100 0001 65 41 A 0110 0001 97 61 a
0010 0010 34 22 " 0100 0010 66 42 B 0110 0010 98 62 b
0010 0011 35 23 # 0100 0011 67 43 C 0110 0011 99 63 c
0010 0100 36 24 $ 0100 0100 68 44 D 0110 0100 100 64 d
0010 0101 37 25 % 0100 0101 69 45 E 0110 0101 101 65 e
0010 0110 38 26 & 0100 0110 70 46 F 0110 0110 102 66 f
0010 0111 39 27 ' 0100 0111 71 47 G 0110 0111 103 67 g
0010 1000 40 28 ( 0100 1000 72 48 H 0110 1000 104 68 h
0010 1001 41 29 ) 0100 1001 73 49 I 0110 1001 105 69 i
0010 1010 42 2A * 0100 1010 74 4A J 0110 1010 106 6A j
0010 1011 43 2B + 0100 1011 75 4B K 0110 1011 107 6B k
0010 1100 44 2C , 0100 1100 76 4C L 0110 1100 108 6C l
0010 1101 45 2D - 0100 1101 77 4D M 0110 1101 109 6D m
0010 1110 46 2E . 0100 1110 78 4E N 0110 1110 110 6E n
0010 1111 47 2F / 0100 1111 79 4F O 0110 1111 111 6F o
0011 0000 48 30 0 0101 0000 80 50 P 0111 0000 112 70 p
0011 0001 49 31 1 0101 0001 81 51 Q 0111 0001 113 71 q
0011 0010 50 32 2 0101 0010 82 52 R 0111 0010 114 72 r
0011 0011 51 33 3 0101 0011 83 53 S 0111 0011 115 73 s
0011 0100 52 34 4 0101 0100 84 54 T 0111 0100 116 74 t
0011 0101 53 35 5 0101 0101 85 55 U 0111 0101 117 75 u
0011 0110 54 36 6 0101 0110 86 56 V 0111 0110 118 76 v
0011 0111 55 37 7 0101 0111 87 57 W 0111 0111 119 77 w
0011 1000 56 38 8 0101 1000 88 58 X 0111 1000 120 78 x
0011 1001 57 39 9 0101 1001 89 59 Y 0111 1001 121 79 y
0011 1010 58 3A : 0101 1010 90 5A Z 0111 1010 122 7A z
0011 1011 59 3B ; 0101 1011 91 5B [ 0111 1011 123 7B {
0011 1100 60 3C < 0101 1100 92 5C 0111 1100 124 7C |
0011 1101 61 3D = 0101 1101 93 5D ] 0111 1101 125 7D }
0011 1110 62 3E > 0101 1110 94 5E ^ 0111 1110 126 7E ~
0011 1111 63 3F ? 0101 1111 95 5F _

原文链接:http://ascii.911cha.com/

第2节字符的进制转换

2.1获取字符(8位)的上四位和下四位

举例1:字符‘a’,它对应的二进制(或称ASCII码)为0110 0001,该二进制的上四位为0110,下四位为0001,这两个二进制对应的十六进制为61

举例2:字符‘d’,它对应的二进制(或称ASCII码)为0110 0100,该二进制的上四位为0110,下四位为0100,这两个二进制对应的十六进制为64

源代码:

#include

//核心函数

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进制,也就是说a16进制数为6b的十六进制数为f,各自对应的十进制数为615

[参考]ASCII对照表 及 字符与二进制、十进制、16进制之间的转化(C/C++)

2.2获取字符(上表中的图形)所对应的十六进制字符

举例3:(续例1)字符‘a’,它对应的16进制为61,若要在屏幕输出两个字符61,需要将‘a’转化为两个字符,这两个字符的ASCII码为0011 01100011 0001

举例4:字符‘o’,它对应的16进制为6F,若要在屏幕输出两个字符6F,需要将‘o’转化为两个字符,这两个字符的ASCII码为0011 01100100 0110

#include

#include

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<

cout<

system("pause");

}

输出结果:

[参考]ASCII对照表 及 字符与二进制、十进制、16进制之间的转化(C/C++)

2.3获取字符对应的十六进制字符的第二种方法(傻瓜式)

根据2.1节的获取8进制字符的上4位、下4位的方法,我联想到了一个新的方法来获取其16进制的字符。结果同2.2节,但原理很简单:

举例5:字符‘o’,它的ASCII码为0110 1111,上四位0110,下四位1111这两个二进制对应的十进制分别为615只需将615通过一个unsigned char数组进行映射即可获得两个字符6F

这个unsigned char数组的构造为:char_map[17] = "0123456789ABCDEF";具体代码如下。结果与2.2节一致。

#include

#include

using namespace std;

//用一个字符数组做映射

unsigned char char_map[17] = "0123456789ABCDEF";

//unsigned char char_map[16] = {'0','1','2','3','4','5','6','7','8','9',

// 'A','B','C','D','E','F'};

//核心函数仍然是2.1节中的代码

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('o');

//这里将char类型的char_buff当数使用

cout<

cout<

system("pause");

}

输出结果:

[参考]ASCII对照表 及 字符与二进制、十进制、16进制之间的转化(C/C++)

2.4递归的方法获取字符对应的二进制字符

举例6:字符‘a’,它对应的ASCII码为0011 0110,没错我就是要在屏幕上输出0011 0110!!!

具体的代码贴在下面,注释写的很清楚,需要的话可以仔细研究一下。

其实这与“中序二叉树遍历“算法类似

#include

#include

using namespace std;

//核心函数

// ch:传入的字符; n:除数,n:除数,它等于当前ch可能到的最大值的根;

// m:指针,用于索引数组,初始值为0; out_bin[]:输出的二进制字符串

void Char2Bin(unsigned char ch,int n, int *m, unsigned char out_bin[]){

if (n>4){

// ch/nch%n是为4位的二进制(最大值可以用4位的二进制表示,实际它还是unsigned char类型的,占用8)

//要获取4位二进制的上2位和下二位,除数n=2^(4/2)=4

Char2Bin(ch/n,n/4,m,out_bin);

Char2Bin(ch%n,n/4,m,out_bin);

}

else if (n>2){

// ch/nch%n2位的二进制

//要获取它的上1位和下一位,除数n=2^(2/2)=2

Char2Bin(ch/n,n/2,m,out_bin);

Char2Bin(ch%n,n/2,m,out_bin);

}

else{

//当前ch2位的二进制,只需将其转化为01即可

out_bin[(*m)++] = ch/2 + '0';

out_bin[(*m)++] = ch%2 + '0';

return; //到这里必须返回,否则都会运行最后一行再返回,造成冗余

}

out_bin[8] = ''; //字符数组最后以''结尾就会变成字符串,

//可以参考http://www.runoob.com/cplusplus/cpp-strings.html

}

//调试部分

void main (){

unsigned char out[9];

int m = 0;

Char2Bin('a',16,&m,out); //当前ch8位的二进制,要获取ch的上4位和下4,所以除数n=2^(8/2)=16

cout << out << endl;

system("pause");

}

输出结果:

https://images2018.cnblogs.com/blog/1357381/201806/1357381-20180625121820328-998995472.png

原文链接: https://www.cnblogs.com/stxs/p/8846545.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/272356

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午10:38
下一篇 2023年2月14日 下午10:39

相关推荐