• String(一)———了解编码


    目录

    string类的介绍

    编码

    basic_string、u16string 、u32string 、wstring


    string类的介绍

    1. string类是表示字符序列的类

    2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。

    3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型

    4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数

    5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个 类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

    从cplusplus文档上也可以查阅到string类的相关信息。

    编码

    string类是basic_string模板类的一个实例,为什么这里是basic_string,这就涉及到编码了。

    我们最早接触到的编码应该是ASCLL码了,它也称美国信息交换标准代码。

     为什么会存在ASCLL码呢?————我们知道计算机的世界只有0和1,没有字母,那么要将字母显示出来就只能将其转化为数字让计算机识别,因此有了ASCLL码。

    因为英文单词由字母组成,所以要表达英文、数字、符号只需要128个数字符号即可。

    但是世界上不只英文一种语言,还有汉语、日语.......因此为了让世界计算机科学联系在一起共同促进发展,产生了一种编码: Unicode(统一码,万国码)

    Unicode 又有多种形式以适应不同语言:UTF-8UTF-16UTF-32

    其中UTF-8使用最为广泛,因为它可以对不同范围的字符使用不同长度的编码,较为灵活;并且它可以兼容ASCLL码。

    UTF-16一个字符以2字节一单位,UTF-32则是4字节一单位。

    还有一种码GBK(称为国码)也就是我国编的编码,因为外国人对博大精深的中文理解毕竟不如国人,所以我们自己编了适合中文的编码GBK。

    像中文就是一个汉字是两字节的,也就需要两个码位来表示。

     s1[0][1]是第一个字,[2][3]是第二个字。至于为什么编码为负,因为这和编码的开头有关系,它需要兼容ASCLL,如果是正的就无法区分是一个一个的ASCLL编码还是汉字编码了。

    汉字编码也是有讲究的,将谐音字等放在了一起方便编码。

    basic_string、u16string 、u32string 、wstring

    上面说了UTF-8是使用最广泛的编码方式,basic_string就是基础这种编码方式:

     u16string是UTF-16

     

    u32string是UTF-32

     wstring是c++98的,也是两个字节为一单位,与UTF-16类似

    总之不同的编码方式对应不同的string,它们接口都差不多,学会一个其余的也都能掌握。

    string类是basic_string模板类的一个实例,它是动态增长的字符数组,原型:

    1. template <class T>
    2. class basic_string
    3. {
    4. private:
    5. T* str;
    6. size_t capacity;
    7. size_t size;
    8. };
    9. typedef basic_string<char> string;

     为什么这里用T,因为不确定一个字符是多大,可能是一个字节,也可能是两个字节大小,对应不同的编码方式。所以这里也不知道字符串类型是什么,因此才说它是动态增长的字符数组。

  • 相关阅读:
    【无标题】
    syslog-ng 发送metric 到 Prometheus + Grafana
    解决Nacos配置刷新问题: 如何启用配置刷新功能以及与`@RefreshScope`注解的关联问题
    如何使用 STARTTLS 加密 OpenLDAP 连接
    C语言连接MySQL
    隧道代理-
    GEE本地端环境搭建错误[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1129)
    ubuntu 22.04通过apt-get安装的apache2将http改造为https的方法
    RabbitMQ工作方式
    A1078 Hashing(25分)PAT 甲级(Advanced Level) Practice(C++)满分题解【哈希表】
  • 原文地址:https://blog.csdn.net/SAKURAjinx/article/details/127577866