C++_字符串常量Literal的前缀, 整数后缀, unicode字符编码, utf-8

字符串常量

https://en.cppreference.com/w/c/language/string_literal
https://en.cppreference.com/w/c/language/escape

前缀

"abc"
+ char[ 4]类型

u8"abc"
+ char[ 4]类型, (utf-8编码)

u"abc"
+ char16_t[ 8]类型 (utf-16编码) `4 * 2 = 8`

U"abc"
+ char32_t[ 16]类型 (utf-32编码) `4 * 4 = 16`

L"abc"
+ wchar_t[ 8]类型

QT里有个宏: #define QT_UNICODE_LITERAL(str) u"" str

只读区域

char* p = "Hello";
p[ 1] = 'M'; 

这是错误的!!! (字符串常量, 在.rodata区域)

char p [] = "Hello"; 这是正确的

代码页

代码页,也称为: 字符集编码。

表示一种 映射关系。 比如: a字符 在计算机里 如何存储。

ASCII码

ASCII: America Standard Code for Information Interchange

标准(基础)ASCII码,只使用了 7个bit!! 表示了[0, 127] [0x00, 0x7F] 共128个数字 所表示的 字符。
最高位,是不参与字符编码的


最高位,用作于“奇偶校验”。奇偶校验有2种方法: 奇校验 和 偶校验。
在奇校验中(假设数据传输无错误):如果7个bit位的数据中,1的个数是偶数,则最高位补1。
使得一个字节8bit中 1的个数是奇数。总之,一个字节8bit中,1的个数是奇数,则说明数据传输正确

这128个字符,对于英语,已经完全够用。

拓展ASCII、Latin-1

拓展ASCII: 在原ASCII所使用的[0, 127]不变的基础上,又附加了128个字符(包含了其他国家语言的一些符号)

这个编码 称为: ISO-8859-1 Latin-1,他是符合 ISO标准 和 ANSI标准的。

Latin-1,他向下[0, 127] 包含了ASCII标准,向上[128, 255] 拓展了一些新的字符。
ASCII编码 是一个 7位的容器。 Latin-1 是一个 8位的容器

即,他使用了 单字节 的 全部空间,即 没有浪费任何空间
把任何编码的字节流,都当做Latin-1编码来处理,都没问题!
Mysql数据库,就默认使用Latin-1编码


GB-xx、 ANSI标准

虽然单字节 已经可以完全表示英文。但对于中文、日文、、、 就不够表示了
所以,就需要用2个或更多字节 来表示。

于是,中国人发明了GB编码系列: GB2312、GBK、、、

日文、韩文,也类似的 有他们各自的编码(和GB编码,类似)


规则是:
、、不管是用几个字节来编码的。 只要有1个字节 他是【0,127】的,则他一定表示的是:ascii!!
、、否则,该字节一定是【128,255】;然后该字节,和下个字节,一起组合起来,组成一个“汉字

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值