[參考]ASCII對照表 及 字符與二進制、十進制、16進制之間的轉化(C/C++)


 

1 ASCII碼對照表... 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.1 ASCII控制字符

二進制

十進制

十六進制

縮寫

名稱/意義

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.2 ASCII可顯示字符

二進制

十進制

十六進制

圖形

二進制

十進制

十六進制

圖形

二進制

十進制

十六進制

圖形

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<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進制,也就是說a16進制數為6b的十六進制數為f,各自對應的十進制數為615

2.2 獲取字符(上表中的圖形)所對應的 十六進制字符

舉例3:(續例1)字符‘a’,它對應的16進制為61,若要在屏幕輸出兩個字符61,需要將‘a’轉化為兩個字符,這兩個字符的ASCII碼為0011 01100011 0001

舉例4:字符‘o’,它對應的16進制為6F,若要在屏幕輸出兩個字符6F,需要將‘o’轉化為兩個字符,這兩個字符的ASCII碼為0011 01100100 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這兩個二進制對應的十進制分別為615只需將615通過一個unsigned char數組進行映射即可獲得兩個字符6F

這個unsigned char數組的構造為:char_map[17] = "0123456789ABCDEF"; 具體代碼如下。結果與2.2節一致。

#include<iostream>

#include<stdlib.h>

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<<char_map[char_buff[0]]<<endl;

       cout<<char_map[char_buff[1]]<<endl;

       system("pause");

}

輸出結果:

2.4 遞歸的方法獲取字符對應的二進制字符

舉例6:字符‘a’,它對應的ASCII碼為0011 0110,沒錯我就是要在屏幕上輸出0011 0110!!!

具體的代碼貼在下面,注釋寫的很清楚,需要的話可以仔細研究一下。

其實這與“中序二叉樹遍歷“算法類似

#include<iostream>

#include<stdlib.h>

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] = '\0'; // 字符數組最后以'\0'結尾就會變成字符串,

    // 可以參考 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM