C语言中的字符型数据与ASCII码表

C/C++
273
0
0
2023-07-27
目录
  • 1、字符型常量
  • 2、字符型变量
  • 3、字符型数据的输入输出
  • (1)scanf()和printf()函数输入输出字符
  • (2)字符输入函数getchar()
  • 总结

1、字符型常量

字符型常量指单个字符,是用一对单引号及其所括起来的字符表示。

例如:‘A’、‘a’、‘0’、’$‘等都是字符型常量。

C语言的字符使用的就是ASCII字符集,总共有128个,每个相应的ASCII码都表示一个字符:

(1)每一个字符都有唯一的次序值,即ASCII码。

(2)数字’0’,‘1’,‘2’,…,‘9’、大写字母’A’,‘B’,‘C’,…,‘Z’、小写字母’a’,‘b’,‘c’,…,'z’的ASCII都是升序连续排列的。

注: 数字和数字字符不一样的,带单引号的是字符,例如:1是整型数字,而’1’是字符,其ASCII码是49,即按整型输出的话就是49,按字符型数据输出就是1。

ASCII码表:

符号(解释)

十进制

十六进制

符号(解释)

十进制

十六进制

NULL(空操作)

0

0x00

@

64

0x40

SOH(标题开始)

1

0x01

A

65

0x41

STX(正文开始)

2

0x02

B

66

0x42

ETX(正文结束)

3

0x03

C

67

0x43

EOT(传输结束)

4

0x04

D

68

0x44

ENQ(请求)

5

0x05

E

69

0x45

ACK(收到通知)

6

0x06

F

70

0x46

BEL(响铃)

7

0x07

G

71

0x47

BS(退格)

8

0x08

H

72

0x48

HT(水平制表符)

9

0x09

I

73

0x49

LF(换行)

10

0x0A

J

74

0x4A

VT(垂直制表符)

11

0x0B

K

75

0x4B

FF(换页)

12

0x0C

L

76

0x4C

CR(回车)

13

0x0D

M

77

0x4D

SO(不用切换)

14

0x0E

N

78

0x4E

SI(启用切换)

15

0x0F

O

79

0x4F

DLE(数据链路转义)

16

0x10

P

80

0x50

DC1(设备控制1)

17

0x11

Q

81

0x51

DC2(设备控制2)

18

0x12

R

82

0x52

DC3(设备控制3)

19

0x13

S

83

0x53

DC4(设备控制4)

20

0x14

T

84

0x54

NAK(拒绝接收)

21

0x15

U

85

0x55

SYN(同步空闲)

22

0x16

V

86

0x56

ETB(结束传输块)

23

0x17

W

87

0x57

CAN(取消)

24

0x18

X

88

0x58

EM(媒介结束)

25

0x19

Y

89

0x59

SUB(代替)

26

0x1A

Z

90

0x5A

ESC(换码(溢出))

27

0x1B

[

91

0x5B

FS(文件分隔符)

28

0x1C

\

92

0x5C

GS(分组符)

29

0x1D

]

93

0x5D

RS(记录分隔符)

30

0x1E

^

94

0x5E

US(单元分隔符)

31

0x1F

_

95

0x5F

(space)(空格)

32

0x20

`

96

0x60

!

33

0x21

a

97

0x61

"

34

0x22

b

98

0x62

#

35

0x23

c

99

0x63

$

36

0x24

d

100

0x64

%

37

0x25

e

101

0x65

&

38

0x26

f

102

0x66

39

0x27

g

103

0x67

(

40

0x28

h

104

0x68

)

41

0x29

i

105

0x69

*

42

0x2A

j

106

0x6A

+

43

0x2B

k

107

0x6B

,

44

0x2C

l

108

0x6C

-

45

0x2D

m

109

0x6D

.

46

0x2E

n

110

0x6E

/

47

0x2F

o

111

0x6F

0

48

0x30

p

112

0x70

1

49

0x31

q

113

0x71

2

50

0x32

r

114

0x72

3

51

0x33

s

115

0x73

4

52

0x32

t

116

0x74

5

53

0x35

u

117

0x75

6

54

0x36

v

118

0x76

7

55

0x37

w

119

0x77

8

56

0x38

x

120

0x78

9

57

0x39

y

121

0x79

:

58

0x3A

z

122

0x7A

;

59

0x3B

{

123

0x7B

<

60

0x3C

|

124

0x7C

=

61

0x3D

}

125

0x7D

>

62

0x3E

~

126

0x7E

?

63

0x3F

DEL(删除)

127

0x7F

在C语言中,所使用的字符被一一映射到一张表中,这张表被称为ASCII码表。

由于标准 ASCII 字符集字符数目有限,无法满足要求。为此,国际标准化组织又制定了 ISO2022 标准,它规定了在保持与 ISO646 兼容的前提下将 ASCII 字符集扩充为 8 位代码的统一方法。 ISO 1陆续制定了一批适用于不同地区的扩充 ASCII 字符集,每种扩充 ASCII 字符集分别可以扩充 128 个字符,这些扩充字符的编码均为高位为 1 的 8 位代码,称为扩展 ASCII 码。

但由于扩展ASCII不再是国际标准,故不在此展示。

十进制码值Dec

缩写/字符

二进制码值Bin

八进制码值Oct

十六进制码值Hex

0

NULL 空字符

0000 0000

00

0x0

1

SOH 标题开始

0000 0001

01

0x1

2

STX 正文开始

0000 0010

02

0x2

3

ETX 正文介绍

0000 0011

03

0x3

4

EOT 传输结束

0000 0100

04

0x4

5

ENQ 请求

0000 0101

05

0x5

6

ACK 收到通知

0000 0110

06

0x6

7

BEL 响铃

0000 0111

07

0x7

8

BS 退格

0000 1000

010

0x8

9

HT 水平制表符

0000 1001

011

0x9

10

LF 换行键

0000 1010

012

0xA

11

VT 垂直制表符

0000 1011

013

0xB

12

FF 换页键

0000 1100

014

0xC

13

CR 回车键

0000 1101

015

0xD

14

SO 不用切换

0000 1110

016

0xE

15

SI 启用切换

0000 1111

017

0xF

16

DLE 数据链路转义

0001 0000

020

0x10

17

DC1 设备控制1

0001 0001

021

0x11

18

DC2 设备控制2

0001 0010

022

0x12

19

DC3 设备控制3

0001 0011

023

0x13

20

DC4 设备控制4

0001 0100

024

0x14

21

NAK 拒绝接受

0001 0101

025

0x15

22

SYN 同步空闲

0001 0110

026

0x16

23

ETB 结束传输块

0001 0111

027

0x17

24

CAN 取消

0001 1000

030

0x18

25

EM 媒介结束

0001 1001

031

0x19

26

SUB 代替

0001 1010

032

0x1A

27

ESC 换码(溢出)

0001 1011

033

0x1B

28

FS 文件分隔符

0001 1100

034

0x1C

29

GS 分组符

0001 1101

035

0x1D

30

RS 记录分隔符

0001 1110

036

0x1E

31

US 单元分隔符

0001 1111

037

0x1F

32

(space) 空格

0010 0000

040

0x20

33

! 叹号

0010 0001

041

0x21

34

" 双引号

0010 0010

042

0x22

35

# 井号

0010 0011

043

0x23

36

$ 美元符

0010 0100

044

0x24

37

% 百分号

0010 0101

045

0x25

38

& 和号

0010 0110

046

0x26

39

’ 闭单引号

0010 0111

047

0x27

40

( 开括号

0010 1000

050

0x28

41

) 闭括号

0010 1001

051

0x29

42

* 星号

0010 1010

052

0x2A

43

+ 加号

0010 1011

053

0x2B

44

, 逗号

0010 1100

054

0x2C

45

- 减号/破折号

0010 1101

055

0x2D

46

. 句号

0010 1110

056

0x2E

47

/ 斜杠

0010 1111

057

0x2F

48

数字0

0011 0000

060

0x30

49

数字1

0011 0001

061

0x31

50

数字2

0011 0010

062

0x32

51

数字3

0011 0011

063

0x33

52

数字4

0011 0100

064

0x34

53

数字5

0011 0101

065

0x35

54

数字6

0011 0110

066

0x36

55

数字7

0011 0111

067

0x37

56

数字8

0011 1000

070

0x38

57

数字9

0011 1001

071

0x39

58

: 冒号

0011 1010

072

0x3A

59

; 分号

0011 1011

073

0x3B

60

< 小于

0011 1100

074

0x3C

61

= 等于

0011 1101

075

0x3D

62

> 大于

0011 1110

076

0x3E

63

? 问号

0011 1111

077

0x3F

64

@ 电子邮件符号

0100 0000

0100

0x40

65

大写字母A

0100 0001

0101

0x41

66

大写字母B

0100 0010

0102

0x42

67

大写字母C

0100 0011

0103

0x43

68

大写字母D

0100 0100

0104

0x44

69

大写字母E

0100 0101

0105

0x45

70

大写字母F

0100 0110

0106

0x46

71

大写字母G

0100 0111

0107

0x47

72

大写字母H

0100 1000

0110

0x48

73

大写字母I

0100 1001

0111

0x49

74

大写字母J

0100 1010

0112

0x4A

75

大写字母K

0100 1011

0113

0x4B

76

大写字母L

0100 1100

0114

0x4C

77

大写字母M

0100 1101

0115

0x4D

78

大写字母N

0100 1110

0116

0x4E

79

大写字母O

0100 1111

0117

0x4F

80

大写字母P

0101 0000

0120

0x50

81

大写字母Q

0101 0001

0121

0x51

82

大写字母R

0101 0010

0122

0x52

83

大写字母S

0101 0011

0123

0x53

84

大写字母T

0101 0100

0124

0x54

85

大写字母U

0101 0101

0125

0x55

86

大写字母V

0101 0110

0126

0x56

87

大写字母W

0101 0111

0127

0x57

88

大写字母X

0101 1000

0130

0x58

89

大写字母Y

0101 1001

0131

0x59

90

大写字母Z

0101 1010

0132

0x5A

91

[ 开方括号

0101 1011

0133

0x5B

92

\ 反斜杠

0101 1100

0134

0x5C

93

] 闭方括号

0101 1101

0135

0x5D

94

^ 脱字节

0101 1110

0136

0x5E

95

_ 下划线

0101 1111

0137

0x5F

96

’ 开单引号

0110 0000

0140

0x60

97

小写字母a

0110 0001

0141

0x61

98

小写字母b

0110 0010

0142

0x62

99

小写字母c

0110 0011

0143

0x63

100

小写字母d

0110 0100

0144

0x64

101

小写字母e

0110 0101

0145

0x65

102

小写字母f

0110 0110

0146

0x66

103

小写字母g

0110 0111

0147

0x67

104

小写字母h

0110 1000

0150

0x68

105

小写字母i

0110 1001

0151

0x69

106

小写字母j

0110 1010

0152

0x6A

107

小写字母k

0110 1011

0153

0x6B

108

小写字母l

0110 1100

0154

0x6C

109

小写字母m

0110 1101

0155

0x6D

110

小写字母n

0110 1110

0156

0x6E

111

小写字母o

0110 1111

0157

0x6F

112

小写字母p

0111 0000

0160

0x70

113

小写字母q

0111 0001

0161

0x71

114

小写字母r

0111 0010

0162

0x72

115

小写字母s

0111 0011

0163

0x73

116

小写字母t

0111 0100

0164

0x74

117

小写字母u

0111 0101

0165

0x75

118

小写字母v

0111 0110

0166

0x76

119

小写字母w

0111 0111

0167

0x77

120

小写字母x

0111 1000

0170

0x78

121

小写字母y

0111 1001

0171

0x79

122

小写字母z

0111 1010

0172

0x7A

123

{ 开花括号

0111 1011

0173

0x7B

124

丨垂线

0111 1100

0174

0x7C

125

} 闭花括号

0111 1101

0175

0x7D

126

~ 波浪号

0111 1110

0176

0x7E

127

DEL 删除

0111 1111

0177

0x7F

2、字符型变量

用char定义的变量为字符型变量。

例如:char op; 定义了一个字符型变量op,其数据类型为char型,即字符型数据。

可以对其进行赋值,例如op='*'就是将字符型常量’*‘赋值给变量op。

字符型变量在计算机中是按照ASCII码的值来存储的,可以和整形数据进行运算,其运算规格类似,例如:op = '*'+1;,那么op按字符型数据输出就是’+’,按整型数据输出就是43。

3、字符型数据的输入输出

(1)scanf()和printf()函数输入输出字符

scanf()和printf()函数进行字符型数据的输入输出和整型浮点型的处理方式完全一样,只是格式控制字符串中相应的格式控制说明为%c。

(2)字符输入函数getchar()

getchar()函数可以从键盘输入一个字符。其一般用法为:

char ch;ch = getchar();

这句话就是从键盘输入一个字符,并将其赋给变量ch。

(3)字符输出函数putchar()

putchar()函数是输出一个字符。其一般用法为:

putchar(输出参数);

输出参数是字符型变量或者字符型常量。

注: 使用getchar()函数和putchar()函数同样需要先包含头文件#include <stdio.h>

函数getchar()和putchar()分别只能输入和输出一个字符,若要处理多个字符的输出和输出,那么一般需要采用循环的方式多次调用该函数。

例如下面的代码为输入8个字符,然后将这8个字符再输出,每两个字符中间添加一个’-’。

#include <stdio.h>

int main(void)
{
	char ch
	int first =, k;	/*first的值表示将要处理的是否为输入的第一个字符*/
	printf("Enter characters:");
	for (k=; k<=8; k++) {
		ch = getchar();	/*变量ch接收从键盘输入的一个字符*/
		if (first ==) {
			putchar(ch);	/*输出存放在变量ch中的字符*/
			first =;		/*处理完第1个字符,清楚标志位*/
		} else {	/*处理第个及以后的字符*/
			putchar('-'); /*输出字符常量'-'*/
			putchar(ch);  /*输出存放在变量ch中的字符*/
		}
	}
}

运行结果:

Enter 8 characters:gorgeous
g-o-r-g-e-o-u-s

例:四则运算

求解简单的四则运算表达式。输入一个形如 "操作数 运算符 操作数"的四则运算表达式,输出运算结果,要求对除数0的情况做特别处理。

#include <stdio.h>

int main(void)
{
	double value, value2;
	char op;
	
	printf("Type in an expression:");	
	scanf("%lf%c%lf", &value, &op, &value2);
	if (op == '+'){							/*判断运算符是否为'+'*/
		printf("=%.f\n", value1+value2);	/*对操作数做加法操作*/
	} else if (op == '-'){					/*否则判断运算符是否为'-'*/
		printf("=%.f\n", value1-value2);
	} else if (op == '*'){					/*否则判断运算符是否为'*'*/
		printf("=%.f\n", value1*value2);
	} else if (op == '/'){					/*否则判断运算符是否为'/'*/
		if (value != 0){
			printf("=%.f\n", value1/value2);
		} else {							/*对除数为作特殊处理*/
			printf("Divisior can not be!\n");
		}
	} else {
		printf ("Unknown operator!\n");		/*运算符输出错误*/
	}

	return;
}

运行结果:

Type in an expression:8.65+3.29
=11.94
Type in an expression:76.9/0
Divisior can not be 0!
Type in an expression:47.2 - 76
Unknown operator!

注: 此处一定要注意,这里的操作数和运算符之间必须连续输入,两者之间不能有空格。

这是因为空格也是一个字符,它会占据运算符的位置,在程序中就会是一个无法识别的运算符。

如上述运行结果第三个。