C语言:ASCII码表和字符操作

news2024/9/19 14:33:25

目录

目录

1. 引言        

2. ASCII码表

2.1 控制字符

2.2 可显示字符

3. 例子

3.1 相关函数

3.2 打印能够显示的 ASCII码

3.3 字母大小写转换

3.4 数字转数字字符


1. 引言        

        因为计算机只是认识 0 和 1组成的一串串的二进制数字,为了将人类认识的文本字符和控制字符在计算机中存储,所以要对这些文本字符和控制字符进行编码存入计算机中,当需要将这些字符显示给我们人类看的时候,对这些数字进行解码。

        ASCII (American Standard Code for Information Interchange),美国信息交换标准代码,就是一种字符编码,用于将文本字符和控制字符与数字进行映射。

2. ASCII码表

2.1 控制字符

       编码 [0, 31] 和 127 是控制字符,共 33 个字符是不可以打印的,其中编码 [0, 31] 这 32 个字符主要用于控制打印机等外围设备。 

2.2 可显示字符

        编码 [32, 126] 是可显示字符,也就是可以打印在屏幕上。记得以下几个编码规则,在 C语言对字符进行操作的时候,或许挺管用。

  • 大写字母 A ~ Z 的 ASCII码 65 ~ 90
  • 小写字母 a ~ z 的 ASCII码 97 ~ 122
  • 大写字母比小写字母的 ASCII码小 32 (0b00100000,0x20) ,比如: char c = 'a',小写字母变大写字母,c = c - 32 得到,也可以做位与操作,c = c & 0b11011111 得到
  • 数字字符 0 ~ 9 的 ASCII码 48 ~ 57,所以一个数字要转换成数字字符,只要将数字 加上 48 (0x30) 即可
  • 字符串的终止符为 '\0',ASCII 码为 0
  • 换行符 '\n' 的 ASCII码为 10 (0x0A)

3. 例子

3.1 相关函数

#include <stdio.h>

void perror( const char *s );        // 依据最新的全局变量 errno 的值,输出错误信息到 stderr

参数:

s: 字符串首地址

返回值:无

说明:字符串 s 后会连接 “: ” 号,错误描述字符后会连接换行符 '\n'

#include <stdio.h>

int main() {
	perror("Test");	// Test: No error

	return 0;
}

#include <stdio.h>

int puts( const char *str );        // 将字符串输出到 stdou (t输出流)  [标准设备 (屏幕)] ,并换行

                                                // 等价于 printf(str); printf("\n");

参数: 

str: 要输出的字符串首地址

返回值:

成功: 返回非负值。

失败: 返回 EOF 并设置 stdout 的错误值和全局 errno, 可以通过 perror 函数打印错误信息

说明:

#define EOF    (-1)         // stdio.h 中有定义

#include <stdio.h>
#include <stdlib.h>

int main() {
	int ret;
	ret = puts("Hello World");    // 将字符串输出到标准输出流 stdout,并换行
	if (ret == EOF) {
		perror("puts()");
		exit(EXIT_FAILURE);
	}

	return 0;
}

#include <stdio.h>

int putchar( int ch );        // 写字符 ch 到 stdout (标准输出流)

                                      // 等价于 putc(ch, stdout);

参数:

ch: 要写入的字符

返回值

成功:返回写入的字符

失败:返回 EOF 并设置 stdout 的错误值和全局 errno, 可以通过 perror 函数打印错误信息

#include <stdio.h>

int main() {
	putchar('a');	// 打印字符

	return 0;
}

3.2 打印能够显示的 ASCII码

#include <stdio.h>
#include <stdlib.h>

int main() {
	int ret = 0;
	char temp = 0;
	ret = puts("能显示的 ASCII 字符:");
	if (ret == EOF) {
		perror("puts()");
		exit(EXIT_FAILURE);
	}

	for (int i = 32; i < 127; i++) {
		ret = putchar(i);
		if (ret == EOF) {
			perror("putchar()");
			exit(EXIT_FAILURE);
		}

		temp = i % 15 == 0 ? '\n' : ' ';
		ret = putchar(temp);
		if (ret == EOF) {
			perror("putchar()");
			exit(EXIT_FAILURE);
		}
	}

	return 0;
}

3.3 字母大小写转换

#include <stdio.h>
#include <stdlib.h>

int main() {
	char str[] = "HelLO\0";
	int ret = 0;
	ret = puts(str);
	if (ret == EOF) {
		perror("puts()");
		exit(EXIT_FAILURE);
	}

	// 都转为小写,小写字母的 ASCII码比大写字母大 32
	char* p = str;
	while (*p != 0) {
		if (*p >= 65 && *p <= 90)	// 大写字母 ASCII码 [65, 90]
			*p = *p + 32;

		p++;
	}
	ret = puts(str);
	if (ret == EOF) {
		perror("puts()");
		exit(EXIT_FAILURE);
	}

	// 都转为大写,大写字母比小写字母小 32,用更加高效的位操作来实现
	p = str;
	while (*p != 0) {
		*p = *p&0b11011111;
		p++;
	}
	ret = puts(str);
	if (ret == EOF) {
		perror("puts()");
		exit(EXIT_FAILURE);
	}

	return 0;
}

3.4 数字转数字字符

#include <stdio.h>
#include <stdlib.h>

int main() {
	// 数字 [0,9] 转成字符
	char temp = 0;
	for (int i = 0; i <= 9; i++) {
		temp = i + 48;	// 数字字符比数字大 48
		putchar(temp);
		putchar(' ');
	}
	putchar('\n');

	for (int i = 0; i <= 9; i++) {
		temp = i | 0b00110000;	// 0-9占用的是低4位,所以可以用位或操作更高效
		putchar(temp);
		putchar(' ');
	}
	putchar('\n');

	return 0;
}

注:ASCII表图片来自

C语言:ASCII码对照表_c语言ascii码表-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2093158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【时间盒子】-【1.序言】高效人士都在用的时间管理方法。我是如何通过鸿蒙元服务APP实现?

一、介绍 【时间盒子】系列内容将帮助开发者学习如何构建一个全新的HarmonyOS元服务应用&#xff0c;学习使用DevEco Studio创建新项目、使用预览器预览页面、使用真机调试APP、自定义弹窗、使用系统提醒能力&#xff08;闹钟&#xff09;、使用首选项数据持久化、熟悉ArkUI页…

Centos 下载和 VM 虚拟机安装

1. Centos 下载 阿里云下载地址 centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 2. VM 中创建 Centos 虚拟机 2.1 先打开 VM 虚拟机&#xff0c;点击首页的创建新的虚拟机 2.2 选择自定义&#xff0c;然后点击下一步。 2.3 这里默认就好&#xff0c;继续选择下一…

PE文件结构详解(非常详细)

最近在参考OpenShell为任务栏设置图片背景时&#xff0c;发现里面使用了IAT Hook&#xff0c;这一块没有接触过&#xff0c;去查资料的时候发现IAT Hook需要对PE文件结构有一定的了解&#xff0c;索性将PE文件结构的资料找出来&#xff0c;系统学习一下。 PE文件结构 Portable…

C++基础(1)——入门知识

目录 1.C版本更新 2.C参考⽂档&#xff1a; 3.C书籍推荐 4.C的第⼀个程序 5.命名空间 5.1namespace的价值 5.2namespace的定义 5.3 命名空间使⽤ 6.C输⼊&输出 7.缺省参数 8.函数重载 9.引⽤ 9.1引⽤的概念和定义 9.2引⽤的特性 9.3引⽤的使用 9.4const引⽤…

YOLOv5独家改进:一种高效移动应用的卷积加性自注意Vision Transformer

💡💡💡本文独家改进:高效移动应用的卷积加性自注意Vision Transformer,构建了一个新颖且高效实现方式——卷积加性相似度函数,并提出了一种名为卷积加性标记混合器(CATM) 的简化方法来降低计算开销 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/cat…

opencv/c++的一些简单的操作(入门)

目录 读取图片 读取视频 读取摄像头 图像处理 腐蚀 膨胀 调整图像大小 裁剪和缩放 绘制 绘制矩形 绘制圆形 绘制线条 透视变换 颜色检测 轮廓查找 人脸检测 检测人脸 检测嘴巴 可适当调整参数 读取图片 读取路径widows使用vis sto一定是\斜杠 #include <o…

LoRA 和 DoRA 代码笔记

Improving LoRA: Implementing Weight-Decomposed Low-Rank Adaptation (DoRA) from Scratch LoRA LoRA初始化时&#xff0c;A使用正态分布&#xff0c;B使用0. class LoRALayer(nn.Module):def __init__(self, in_dim, out_dim, rank, alpha):super().__init__()std_dev 1…

第L1周:机器学习-数据预处理

第L1周&#xff1a;机器学习-数据预处理 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 学习要点&#xff1a; **** 学习如何处理缺损数据尝试进行Label编码使用train_test_split进行数据划分学习特征标准化…

EXO项目StandardNode;max_generate_tokens;buffered_token_output;is_finished;

目录 StandardNode max_generate_tokens buffered_token_output 构造函数参数 类属性 总结 is_finished max_generate_tokens self.buffered_token_output StandardNode _process_tensor result是一个np.ndarray ,result.size == 1是什么意思 StandardNode max_g…

【Python机器学习】NLP词频背后的含义——反馈及改进

之前学习的LSA方法都没有考虑文档之间的相似度信息&#xff0c;创建的主题对一组通用规则来说是最优的。在这些特征&#xff08;主题&#xff09;提取模型的无监督学习中&#xff0c;没有任何关于主题向量之间应该多么接近的数据。我们也不允许任何关于主题向量在哪里结束或者它…

力扣刷题(复习版1)

文章目录 题目&#xff1a;最大重复子字符串题解 题目&#xff1a; 面试题 16.07. 最大数值题解 题目&#xff1a; 最大字符串配对数目题解 题目&#xff1a; 字符串中第二大的数字题解 题目&#xff1a; 统计最大组的数目题解 题目&#xff1a; 删除每行中的最大值题解 题目&a…

记录|Chart控件使用

目录 前言一、Series集合1.1 什么是Series1.2 IsValueShownAsLabel1.3 Points 二、ChartArea2.1 轴- Axes2.1.1 Title2.1.2 刻度下的Maximum、Minimum2.1.3 间隔- Interval2.1.4 网格刻度线 2.2 游标- CursorX/CursorYMajorGrid属性中的Enabled 更新时间 前言 参考视频&#xf…

七、库存管理——盘点业务

第一节 库存管理盘点 1、盘点的目的 答&#xff1a;是指通过定期或临时对库存商品的实际数量进行盘查、清点&#xff0c;然后掌握货物的流动情况&#xff08;入库、出库、调拨、在库等&#xff09;&#xff0c;最后对仓库现有物品的实际数量与保管账上记录的数量相核对&…

Spring Boot集成Stripe快速入门demo

1.什么是Stripe&#xff1f; 一体化全球支付平台&#xff0c;开启收入增长引擎&#xff0c;针对不同规模业务打造的支付解决方案&#xff0c;满足从初创公司到跨国企业的多维度需求&#xff0c;助力全球范围内线上线下付款。 转化更多客户: 通过内置的优化功能、100 多种支付…

QT QGraphicsView实现预览图片显示缩略图功能

QT QGraphicsView实现预览图片显示缩略图功能QT creator Qt5.15.2 头文件&#xff1a; #ifndef TGRAPHICSVIEW_H #define TGRAPHICSVIEW_H#include <QGraphicsView> #include <QMainWindow> #include <QObject> #include <QWidget>class TGraphicsVie…

vue页面自适应 动态 postcss postcss-pxtorem

vue页面自适应 动态 postcss postcss-pxtorem postcss-pxtorem实现页面自适应1、安装postcss-pxtorem2、根目录创建postcss.config.js&#xff0c;并配置以下内容3、创建rem.js&#xff0c;动态设置root px4、在main.js中引入rem.js5、在main.js中创建全局处理函数px2rem6、对…

【王树森】Vision Transformer (ViT) 用于图片分类(个人向笔记)

图片分类任务 给定一张图片&#xff0c;现在要求神经网络能够输出它对这个图片的分类结果。下图表示神经网络有40%的信心认定这个图片是狗 ResNet&#xff08;CNN&#xff09;曾经是是图像分类的最好模型在有足够大数据做预训练的情况下&#xff0c;ViT要强于ResNetViT 就是Tr…

S7-200编程软件STEP 7打开时界面乱码显示Translation Required

遇到的问题 如题&#xff0c;两个月没有打开过S7-200编程软件&#xff08;软件版本是V4.0 STEP 7 MicroWIN SP9&#xff0c;电脑系统是Windows 11&#xff09;&#xff0c;这一次打开就发现它的那个界面乱码了&#xff0c;原来时中文汉化的地方全都变成了Translation Required…

笔记整理—内核!启动!—uboot部分(1)

常规启动时&#xff0c;各镜像都在SD卡中的各种分区中&#xff0c;内核放在kernel分区&#xff0c;从SD卡到DDR的连接处&#xff08;内核不需要进行重定位&#xff0c;直接从链接处启动&#xff09;。uboot从sd卡分区读使用movi命令。 使用fastboot指令可以查看分区情况&#x…

通过Dot1q终结子接口实现VLAN间互访

如图1所示&#xff0c;SwitchA为支持配置子接口的三层交换机&#xff0c;SwitchB为二层交换机&#xff0c;SwitchA通过一个三层以太网接口与SwitchB互连。用户主机被划分到两个VLAN&#xff1a;VLAN2和VLAN3。由于业务需要&#xff0c;不同VLAN的用户要求互通。 图1 通过Dot1q…