catalog
字符串常量
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】;然后该字节,和下个字节,一起组合起来,组成一个“汉字