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

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

运行结果:

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

例:四则运算

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

#include <stdio.h>

int main(void)
{
	double value1, value2;
	char op;

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

	return 0;
}

运行结果:

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!

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

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

如上述运行结果第三个。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现求解素数的N种方法总结

    目录 前言 必备小知识 C语言详解<试除法>求解素数 试除法境界1 试除法境界2 试除法境界3 试除法境界4 C语言详解<筛选法>求解素数 筛选法境界5 前言 哈喽各位友友们,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!我仅已此文,手把手带领大家探讨利用试除法.筛选法求解素数的n层境界!都是精华内容,可不要错过哟!!! 必备小知识 质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数:否则称为合数(规定1既不是质数也不是合数).这里

  • C语言利用goto语句设计实现一个关机程序

    目录 前言 一.什么是goto语句 二.goto语句的作用是什么 三.goto语句的缺点 四.goto语句的结构与用法 五.goto语句的巧用实例——关机小程序 总结撒花 前言 goto语句其实在平常中我们 除了学习分支语句和循环语句时,介绍循环语句时,才会知道有goto语句这个用法,那读者可能会问:我们还有学习的必要吗? 答案是显而易见的,正如黑格尔所说的:存在即合理!既然存在,就会有存在的必要!虽然我们现在不会遇到且用到 ,当在搞Linux硬件驱动等的时候,其内核含有较多的goto语句,如果

  • C语言嵌入式实现支持浮点输出的printf示例详解

    目录 简介 背景 C语言可变参数函数 踩坑 功能实现 简介 mr-printf 模块为 mr-library 项目下的可裁剪模块,以C语言编写,可快速移植到各种平台(主要以嵌入式mcu为主). mr-printf 模块用以替代 libc 中 printf, 可在较小资源占用的同时支持绝大部分 printf 功能,于此同时还支持对单独功能模块的裁剪以减少用户不需要功能的资源占用. 背景 printf 大家应该使用的比较多,但是在嵌入式平台中,尤其是单片机中,libc中的printf对内存的占用较高

  • 通俗易懂的C语言快速排序和归并排序的时间复杂度分析

    目录 快速排序和归并排序的时间复杂度分析——通俗易懂 归并排序的时间复杂度分析 快速排序的时间复杂度 快速排序的最坏情况O(n^2) 总结 快速排序和归并排序的时间复杂度分析——通俗易懂 今天面试的时候,被问到归并排序的时间复杂度,这个大家都知道是O(nlogn),但是面试官又继续问,怎么推导出来的.这我就有点懵了,因为之前确实没有去真正理解这个时间复杂度是如何得出的,于是就随便答了一波(理解了之后,发现面试的时候答错了......). 归并排序和快速排序,是算法中,非常重要的两个知识点,同时也

  • C语言软件iic虚拟总线中间层设计详解

    目录 简介 IIC-协议 接线方式 总线 工作本质 虚拟总线(中间层)设计 使用示例 简介 mr-soft-iic 模块为 mr-library 项目下的可裁剪模块,以C语言编写,可快速移植到各种平台(主要以嵌入式mcu为主). mr-soft-iic 模块通过 io 模拟实现 iic 协议. IIC-协议 SPI 一般为一主多从设计.由2根线组成:CLK(时钟).SDA(数据). 接线方式 主机 从机 CLK CLK SDA SDA 主机从机一 一对应相接. 总线 IIC 通过地址码识别设备,

  • C语言中的字符(char)详细讲解

    1.字符型(char)简介 字符型(char)用于储存字符(character),如英文字母或标点. 严格来说,char 其实也是整数类型(integer type),因为 char 类型储存的实际上是整数,而不是字符. 计算机使用特定的整数编码来表示特定的字符. 2. 声明字符型变量 3. 字符常量与初始化 实例: 用 char 类型来专门表示一个字符,例如: char a='1'; char b='$'; char c='X'; char d=' '; // 空格也是一个字符 char e=

  • 详解C语言中不同类型的数据转换规则

    不同类型数据间的混合运算与类型转换 1.自动类型转换 在C语言中,自动类型转换遵循以下规则: ①若参与运算量的类型不同,则先转换成同一类型,然后进行运算 ②转换按数据长度增加的方向进行,以保证精度不降低.如int型和long型运算时,先把int量转成long型后再进行运算 a.若两种类型的字节数不同,转换成字节数高的类型 b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型 ③所有的浮点运算都是以双精度进行的,即使是两个float单精度量运算的表达式,也要先转换成double

  • 详解Java语言中一个字符占几个字节?

    题主要区分清楚内码(internal encoding)和外码(external encoding)就好了. 内码是程序内部使用的字符编码,特别是某种语言实现其char或String类型在内存里用的内部编码: 外码是程序与外部交互时外部使用的字符编码."外部"相对"内部"而言:不是char或String在内存里用的内部编码的地方都可以认为是"外部".例如,外部可以是序列化之后的char或String,或者外部的文件.命令行参数之类的. Java语

  • R语言中矩阵matrix和数据框data.frame的使用详解

    本文主要介绍了R语言中矩阵matrix和数据框data.frame的一些使用,分享给大家,具体如下: "一,矩阵matrix" "创建向量" x_1=c(1,2,3) x_1=c(1:3) x_2=1:3 typeof(x_1)==typeof(x_2)#查看目标类型 x_3=seq(1,6,length=3)#将1--6分为3个数 a<-rep(1:3,each=3) #1到3依次重复 c<-rep(1:3,times=3) #1到3重复3次 d<

  • 关于c语言中输出字符指针的相关问题

    目录 c语言输出字符指针问题 例如定义一个 char * p = "hello";的字符指针 c语言指针求字符串长度 c语言输出字符指针问题 例如定义一个 char * p = "hello";的字符指针 首先搞清楚在c语言中没有字符串的类型,所以对字符串操作,有两种形式:可以用字符指针(为什么不叫字符串指针,我个人觉得,字符指针针对的是单个字符的操作,即指针操作,所以就叫它字符指针吧...) 或者字符串数组(这里不在讨论字符串相关问题,前面博客有讨论过)这里的指针

  • C语言中交换int型变量的值及转换为字符数组的方法

    不使用其他变量交换两个整型的值: #include <stdio.h> void main(){ int a = 3; int b = 4; a = a ^ b;//使用异或交换 b = b ^ a; a = a ^ b; printf("%d, %d\n", a, b); a = a - b;//使用加减交换 b = a + b; a = b - a; printf("%d, %d\n", a, b); a ^= b ^= a ^= b; printf

  • C语言中查找字符在字符串中出现的位置的方法

    C语言strchr()函数:查找某字符在字符串中首次出现的位置 头文件:#include <string.h> strchr() 用来查找某字符在字符串中首次出现的位置,其原型为: char * strchr (const char *str, int c); [参数]str 为要查找的字符串,c 为要查找的字符. strchr() 将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回. 注意:字符串 str 的结束标志 NUL 也会被纳入检索范围,所以 str 的组后一个

  • Go语言中多字节字符的处理方法详解

    1 概述 Go语言的字符串是使用 UTF-8 编码的.UTF-8 是 Unicode 的实现方式之一.本文内容包括:UTF-8 和 Unicode 的关系,Go语言提供的 unicode 包和 unicode/utf8 包的使用. 下面话不多说了,来一起看看详细的介绍吧 2 UTF-8 和 Unicode 的关系 Unicode一种字符集,是国际标谁化组织(ISO)设计的一个包括了地球上所有文化.所有字母和符号 的编码.他们叫它 Universal Multiple-Octet Coded Ch

  • C语言中字符的输入输出以及计算字符个数的方法详解

    C语言字符输入与输出 标准库提供的输入/输出模型非常简单.无论文本从何处输入,输出到何处,其输入/输出都是按照字符流的方式处理.文本流是由多行字符构成的字符序列,而每行字符则由 0 个或多个字符组成,行末是一个换行符.标准库负责使每个输入/输出流都能够遵守这一模型.使用标准库的 C 语言程序员不必关心在程序之外这些行是如何表示的. 标准库提供了一次读/写一个字符的函数,其中最简单的是 getchar 和 putchar 两个函数.每次调用时,getchar 函数从文本流中读入下一个输入字符,并将

  • 深入解读C语言中的符号常量EOF

    EOF是指文件的结束符,是一个宏定义     借助于getchar 与putchar 函数,可以在不了解其它输入/输出知识的情况下编写出 数量惊人的有用的代码.最简单的例子就是把输入一次一个字符地复制到输出,其基本思想 如下: 读一个字符 while (该字符不是文件结束指示符) 输出刚读入的字符 读下一个字符 将上述基本思想转换为C语言程序为: #include <stdio.h> /* copy input to output; 1st version */ main() { int c;

随机推荐