【C++】编码最全详解

news2024/10/19 23:57:12


Blog’s 主页: 白乐天_ξ( ✿>◡❛)
🌈 个人Motto:他强任他强,清风拂山冈!
🔥 所属专栏:C++深入学习笔记
💫 欢迎来到我的学习笔记!

一、什么编码?

  • 编码:人类文字信息是有各种各样的符号组成的, 但是他们却不能直接在内存中存储。计算机内存里面只存储二进制信息01。无符号整型:0 ~ 255共256个收据;有符号整型:-128 ~ 127。那么内存中如何表示符号?

二、各种编码方式

2.1 ASCII编码表

  • 这里就有了编码:一个值对应一个符号。比如说英美人为了表示出他们的文字,就创造出了ASCII编码表,主要就是为了表示出他们自己的文字、常见符号等一共128个字符。
int main()
{
    char buff[] = "apple sort";
    // 在内存里面存储的是值和符号的映射关系
    // 内存里面存储的其实是
    return 0;
}
  • 我们在监视窗口可以看见内存里面存储的内容:就是字符对应的ASCII码值。**ASCII编码表的本质:字符和值的映射。**打印输出的过程相当于是一个查编码表的过程。
  • 内存里面存储的是值,对我们显示的是符号。

2.2 万国码

  • 前面的ASCII码表没有其他国家的特殊字符,因此我们推出了万国码(Unicode),也叫做统一码、单一码,编译了各个国家的文字符号!
  • 万国码不断地发展改进和完善,现在主要有UTF-8UTF-16UTF-32等,UTF-8是一种变长编码,可以兼容ASCII编码,比较常用。只使用了0~127,所以可以认为是无符号类型的。几个字节对应一个符号,例如常见汉字也是使用2个字节来存储的。
  • UTF-8的编码格式(一种变长编码):(简单了解即可)一个值对应一个符号
字节格式实际编码位码点范围
1字节0xxxxxxx(ASCII编码)70~127
2字节110xxxxx 10xxxxxx11128~2047
3字节1110xxxx 10xxxxxx 10xxxxxx162048~65535
4字节11110xxx 10xxxxxx 10xxxxxx 10xxxxxx2165536~2097151
  • UTF-16两个字节为一个单位。
  • UTF-32就是以4字节为一个单位,但是会比较浪费空间。
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

int main()
{
	char str[] = "牛马";			// 1个字节为一个单位
	char16_t str16[] = u"泥嚎"; 	// 2字节为一个单位
	char32_t str32[] = U"再见";		// 
	cout << sizeof(str) << endl;    // 5
	cout << sizeof(str16) << endl;  // 6
	cout << sizeof(str32) << endl;  // 12

	return 0;
}
  • 根据下面的代码可以发现:万国码中的汉字是按照同音字进行存储的。(相当于是按照拼音存储的)
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

int main()
{
	char str[] = "泥嚎";
	cout << strlen(str) << endl;

	str[0]++;
	cout << str << endl;

	str[1]--;
	cout << str << endl;

	str[2]++;
	cout << str << endl;

	str[3]--;
	cout << str << endl;

	return 0;
}
  • 底层对应的值变化了,在表里面查询到的符号就变了,更加说明了值和符号之间的映射关系。UTF-8就比较结合能空间,有些字符1个字节就够了。
  • 这就是为什么string需要实现为模板:默认string支持UTF-8,在文档中就有说明的。
  • string里面也提供了16、32的字符:char16_t(数据前面加一个u前缀)、char32_t(数据前面加一个U前缀,)等等。

宽字符:不确定大小长度的,就像long一样,在不同平台下的大小不一样。主要用来存储UTF-16。

char str[] = "牛马";			// UTF-8是以1个字节为一个单位:一个汉字2字节,2个汉字4字节加一个\0,一共5字节
char16_t str16[] = u"泥嚎"; 	// 2字节为一个单位2 + 2 + 2 = 6,\0也是2字节 
char32_t str32[] = U"再见";		// 4字节为一个单位4 + 4 + 4 = 12
wchar wstr[] = L"泥嚎";
cout << sizeof(str) << endl;    // 5
cout << sizeof(str16) << endl;  // 6
cout << sizeof(str32) << endl;  // 12
cout << sizeof(wstr) << endl;   // 

2.3 GBK编码

  • GBK编码:我国自己的编码。GB+数字:都是这一系列的。它包括了汉字(包括中国台湾省的繁体、民族字体文字、古代文字、生僻字……)、韩语、日语(中日韩)。Windows也是用的GBK编码。

三、ASCII编码详解

3.1.ASCII码的诞生

ASCII码开发始于1960年,由美国标准协会(ASA,现ANSI)技术委员会X3负责指定。最初的目的是为了一致地处理文本数据,解决当时不同计算机系统间数据交换不变的问题。

3.2.数字字符

ASCII码值字符描述
48‘0’数字0
49‘1’数字1
50‘2’数字2
51‘3’数字3
52‘4’数字4
53‘5’数字5
54‘6’数字6
55‘7’数字7
56'8数字8
57‘9’数字9

3.3.可打印字符

3.3.1.空格字符和标点符号

ASCII码值字符描述
32(空格)空格
33感叹号
34双引号
35#井号
36$美元符号(英文字符)
37%百分号
38&和号
39单引号
40(做括号
41)右括号
42*星号
43+加号
44,逗号
45-减号
46.句号
47/斜杠

3.3.2.数字

ASCII码值字符描述
480数字0
491数字1
502数字2
513数字3
524数字4
535数字5
546数字6
557数字7
568数字8
579数字9

3.3.3.大写字母

ASCII码值字符描述
65A大写字母 A
66B大写字母 B
67C大写字母 C
68D大写字母 D
69E大写字母 E
70F大写字母 F
71G大写字母 G
72H大写字母 H
73I大写字母 I
74J大写字母 J
75K大写字母 K
76L大写字母 L
77M大写字母 M
78N大写字母 N
79O大写字母 O
80P大写字母 P
81Q大写字母 Q
82R大写字母 R
83S大写字母 S
84T大写字母 T
85U大写字母 U
86V大写字母 V
87W大写字母 W
88X大写字母 X
89Y大写字母 Y
90Z大写字母 Z

3.3.4.小写字母

ASCII码值字符描述
97a小写字母a
98b小写字母b
99c小写字母c
100d小写字母d
101e小写字母e
102f小写字母f
103g小写字母g
104h小写字母h
105i小写字母i
106j小写字母j
107k小写字母k
108l小写字母l
109m小写字母m
110n小写字母n
111o小写字母o
112p小写字母p
113q小写字母q
114r小写字母r
115s小写字母s
116t小写字母t
117u小写字母u
118v小写字母v
119w小写字母w
120x小写字母x
121y小写字母y
122z小写字母z

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

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

相关文章

DDR Study - LPDDR Initial

参考来源&#xff1a;JESD209-4B 在之前的DDR Study - Basic Understanding中介绍了DDR的基础概念&#xff0c;从这篇文章开始&#xff0c;会基于LPDDR4依次按照如下顺序对LPDDR内容进行简单分析&#xff1a; LPDDR Initial → LPDDR Write Leveling and DQ Training → LPDDR …

【Jenkins】windows安装步骤

【Jenkins】windows安装步骤 官网使用WAR包方式运行浏览器访问Jenkinswindows-installer安装安装过程问题解决This account either does not hava the privilege to logon as a service or the account was unable to be verified 安装成功修改jenkins.xml启动jenkins访问jenki…

如何测试IP速度?

了解代理的连接速度是否快速是确保网络使用效率和体验的关键因素之一。本文来为大家如何有效地评估和测试代理IP的连接速度&#xff0c;以及一些实用的方法和工具&#xff0c;帮助用户做出明智的选择和决策。 一、如何评估代理IP的连接速度 1. 使用在线速度测试工具 为了快速…

阿里云云盘在卸载时关联到PHP进程,如何在不影响PHP进程情况下卸载磁盘

1.问题&#xff1a; 在使用umount /dev/vdc1 卸载磁盘时&#xff0c;提示如下&#xff0c;导致无法在Linux系统下卸载磁盘 umount /dev/vdc1 umount: /var/www/html/*/eshop/IFile3: target is busy.(In some cases useful info about processes that usethe device is found…

鸿蒙Next设备上的ProxyMan、Charles网络抓包配置教程

一、Proxyman配置 1. 导出证书 ProxyMan菜单栏依次点击 证书—>导出—>根证书为PEM 然后保存.pem文件传送(如hdc命令<下文会有介绍>)至鸿蒙Next设备存储任意位置 2. 安装证书 系统设置搜索“证书”&#xff0c;结果列表中点击“证书与凭据” 点击“从存储设备…

AI周报(10.13-10.19)

AI应用-清华校友用AI破解162个高数定理 加州理工、斯坦福和威大的研究人员提出了LeanAgent——一个终身学习&#xff0c;并能证明定理的AI智能体。LeanAgent会根据数学难度优化的学习轨迹课程&#xff0c;来提高学习策略。并且&#xff0c;它还有一个动态数据库&#xff0c;有效…

数据结构练习题4(链表)

1两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4]…

Sqli-labs less-27

Sqli-labs less-27 过滤union\select绕过方式 ### 1. 逻辑绕过 例&#xff1a; 过滤代码 union select user,password from users 绕过方式 1 && (select user from users where userid1)‘admin’### 2.十六进制字符绕过 select ——> selec\x74 union——>un…

AutoFixture:.NET 的假数据生成工具

上次推荐过《Bogus&#xff1a;.NET的假数据生成利器》方便我们制造假数据测试。今天继续推荐另外一个也是非常流行的工具。 01 项目简介 AutoFixture 是一个用于 .NET 的测试工具&#xff0c;它允许开发者在单元测试中自动生成随机的测试数据。它支持广泛的数据类型&#xf…

充电桩高压快充发展趋势

一、为什么要升级充电电压 1、新能源发展的困境 随着电动汽车加快发展&#xff0c;用户对电动汽车接受度不断提高&#xff0c;充电问题是影响电动车普及的重要因素&#xff0c;用户快速补能的需求强烈&#xff0c;例如节假日经常会遇到&#xff0c;高速充电1小时&#xff0c;…

编码方式知识整理【ASCII、Unicode和UTF-8】

编码方式 一、ASCII编码二、Unicode 编码三、UTF-8编码四、GB2312编码五、GBK编码 计算机中对数据的存储为二进制形式&#xff0c;但采用什么样的编码方式存储&#xff0c;效率更高。主要编码方式有 ASCII、Unicode、UTF-8等。 英文一般为1个字节&#xff0c;汉字一般为3个字节…

智联云采 SRM2.0 testService SQL注入漏洞复现

0x01 产品简介 智联云采是一款针对企业供应链管理难题及智能化转型升级需求而设计的解决方案,针对企业供应链管理难题,及智能化转型升级需求,智联云采依托人工智能、物联网、大数据、云等技术,通过软硬件系统化方案,帮助企业实现供应商关系管理和采购线上化、移动化、智能…

Pytorch复习(二)

一、非线性回归 import torch import matplotlib.pyplot as plt from torch import nn,optim from torch.autograd import Variable import numpy as npx_data np.linspace(-2,2,200)[:,np.newaxis] noise np.random.normal(0,0.2,x_data.shape) y_data np.square(x_data) …

.Net自动更新程序GeneralUpdate,适用于wpf,winfrom,控制台应用

GeneralUpdate是基于.net framwork4.5.2开发的一款&#xff08;c/s应用&#xff09;自动升级程序。 第一个版本叫Autoupdate 有人会奇怪为什么会改名称&#xff0c;稍微解释一下是因为在nuget上有重名的项目再者就是新版本更新功能不仅限于wpf程序的更新。 将更新的核心部分抽…

VS Code开发qt项目

没整明白&#xff0c;尴尬 安装扩展 设置cmake路径 前提是已经安装了QT 报错 用msvc选windows启动&#xff0c;用mingw则选gdb启动

pandas处理时间序列-基础入门

公众号&#xff1a;尤而小屋编辑&#xff1a;Peter作者&#xff1a;Peter 大家好&#xff0c;我是Peter~ Pandas 是一个强大的 Python 数据分析库&#xff0c;它提供了非常灵活和高效的方式来处理时间序列数据。 时间序列数据是指按照时间顺序排列的数据点集合&#xff0c;通…

LabVIEW示波器通信及应用

基于LabVIEW平台开发的罗德与施瓦茨示波器通信与应用系统实现了示波器的远程控制及波形数据的实时分析&#xff0c;通过TCP/IP或USB接口与计算机通信&#xff0c;利用VISA技术进行指令传输&#xff0c;从而实现高效的数据采集与处理功能。 项目背景 随着现代电子测试需求的日益…

滑铁卢大学大模型公开课资料来了,大模型入门到精通,非常详细收藏我这一篇就够了

今天给大家推荐的是加拿大滑铁卢大学大模型公开课资源&#xff0c;根据QS世界大学排名&#xff0c;其计算机专业排名全球22。 课程内容主要分为五部分&#xff1a;大模型基础、Transformer架构、大语言模型、多模态大模型、智能体。 每一课除了PPT和视频链接&#xff0c;还有…

013_django基于大数据的高血压人群分析系统2024_dcb7986h_055

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

VScode实现服务器免密登录(亲测有效)

目录 1 免密步骤1.1 在本地生成密钥1.2 在vscode中下载Remote-SSH1.3 配置SSH文件1.4 在服务器中添加本地公开密钥1.5 远程免密连接试验 2 后记 1 免密步骤 1.1 在本地生成密钥 window R打开命令面板 ssh-keygen1.2 在vscode中下载Remote-SSH 1.3 配置SSH文件 本地密钥的文…