C++基础编程第一章:byte、多字节、宽字节、Uincode、UTF8等

文章探讨了编程基础知识,包括位(bit)和字节(byte)的概念,以及它们在存储数据时的作用。接着介绍了ASCII和Unicode字符编码,强调Unicode为解决乱码问题而生,以及UTF-8、UTF-16和UTF-32在存储效率和空间占用上的差异。此外,还提到了宽字节和多字节字符在不同字符集如ANSI和Unicode中的应用,并介绍了TCHAR和CString在处理不同编码时的适应性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

写了好些年代码了,却一直没有去深究这些基础,最近闲来有时间研究一下。建议从头开始看,因为这些知识点都是层层递进的。

英文中文对照
bit位(比特)
byte字节

Byte和Bit

  • bit 表示位。二进制数系统中,每个 0 或 1 就是一个位(bit),是存储信息的最小单位。
  • Byte 表示字节。字节是由 8 个位所组成,一个字节存储 8 位无符号数,储存的数值范围为 0-255。

Byte和Int

  • int类型会占用4个byte。
  • byte 的大小范围是-128—127 ,int的大小范围是-2147483648到2147483647。

ASCII

将二进制通过一套特殊的规则转换为英文字符和一些特殊符号,这套编码格式就叫ASCII字符集。

  • ASCII字符集,它使用7 bit来表示一个字符,总共表示128个字符
  • ASCII字符集的最高位永远是0。0加上7bit 正好是8bit表示一个byte。例如第128个字符,它的二进制表示为 0111 1110。

Unicode

为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。ASCII为一个byte只能表示英文和一些特殊符号,Unicode是它的升级版。

Unicode 为世界上所有字符都分配了一个唯一的编号。

它是一种规定,Unicode 本身只规定了每个字符的编号是多少,并没有规定这个编号如何存储。 有的人会说了,那我可以直接把 Unicode 编号直接转换成二进制进行存储,是的,你可以。但是这种方法不一定是最好的,会在传输、存储中浪费很多内存空间,所以后续出现了多种UTF版本。

以英文字母 “I” 举例,它的Unicode唯一编号为 “0049” 。转化为二进制存储为”00000000 01001001“ ,但是用UTF-8存储为”01001001“,存储时候少了8位,这就是为什么需要UTF-16,UTF-8等格式了。

简述UTF-8、UTF-16、UTF-32的区别
  • UTF-32 用四个byte表示一个字符
  • UTF-16 用两个byte表示一个字符
  • UTF-8 可变byte,比如汉字字符用3个byte,英语字符用1个byte。这样在多英文字符的时候,存储占用字节更小,利于网络传输。

宽字节、多字节

  • ANSI字符集所支持的就是多字节的也叫窄字节,类型来说就对应char类型。1 char = 1 byte 。
  • Unicode字符集也叫宽字符集,所支持的就是宽字符集,从类型上来说就是 wchar_t类型。从上面的Unicode介绍中可以知道,wchar_t = 2 char。

在MFC中,ANSI字符集 所支持的就是多字节的也叫窄字节,类型来说就对应char类型。 Unicode字符集 也叫宽字符集
所支持的就是宽字符集,从类型上来说就是 wchar_t类型。
为了方便在不同的字符集上转换,就有了一种TCHAR类型,TCHAR能随着窄宽字节的变化自动变化。CString也是这样的。我们在定义CString的时候就需要使用的宏_T(“值”)或者TEXT(“值”)来表示文字了,这两个宏也是随编码不同,自动把里面的值转换成对应的编码。

类型解释
char多字节字符,一个char占一个字节
wchar_t宽字符,一个wchar_t占2个字节
LPSTRchar* 也就是char的指针
LPCSTRconst char* 也就是一个限定不会被改变的char指针
LPWSTRwchar_t*
LPCWSTRconst wchar_t*
LPTSTRTCHAR*
LPCTSTRconst TCHAR*
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值