c++字符字面值常量

喜夏-厌秋 提交于 2020-01-31 04:55:18

c++字符字面值常量

// by 鸟哥 qq1833183060   字符字面量
#include <iostream>
#include <string>
#include <cstdlib>
#include <iomanip>
void printCode(auto c){
    int len=sizeof(c);
    std::cout<<std::hex;
    std::cout<<"code:";
    unsigned char* p=(unsigned char*)&c;
    for(int i=0;i<len;i++){
        unsigned char code=*(p+i);
        if(code==0){
            std::cout<<std::setfill('0')<<std::setw(2)<<"0"<<" ";
        }else{
            std::cout<<std::setfill('0')<<std::setw(2)<<(int)code<<" ";
        }
    }
    
    std::cout<<std::endl;
}

int main()
{
    auto a='a';     //窄字符字面量或普通字符字面量,例如 'a' 或 '\n' 或 '\13'。这种字面量具有 char 类型
    auto b=u8'a';   // UTF-8 字符字面量,例如 u8'a'。这种字面量具有 char (C++20 前)char8_t (C++20 起) 类型,且其值等于 c-字符 的 ISO 10646 码位值,只要码位值能以单个 UTF-8 编码单元表示
    auto c=u'a';    //UTF-16 字符字面量,例如 u'字'。这种字面量具有 char16_t 类型,且其值等于 c-字符 的 ISO 10646 码位值,只要该值能以单个 UTF-16 编码单元表示
    auto d=U'a';    //UTF-32 字符字面量,例如 U'字'。这种字面量具有 char32_t 类型,且其值等于 c-字符 的 ISO 10646 码位值。
    auto e=L'a';    // 宽字符字面量,例如 L'β' 或 L'字'。这种字面量具有 wchar_t 类型,且其值等于 c-字符 在执行宽字符集中的值。若 c-字符 在执行宽字符集中无法表示(例如在 wchar_t 为 16 位的 Windows 上的非 BMP 值),则字面量的值是实现定义的。
    
    std::cout<<sizeof(a)<<' '<<sizeof(b)<<' '<<sizeof(c)<<' '<<sizeof(d)<<' '<<sizeof(e)<<std::endl;
    printCode(a);
    printCode(b);
    printCode(c);
    printCode(d);
    auto aa='字';
    auto bb=u8'字';
    auto cc=u'字';
    auto dd=U'字';
    auto ee=L'字';
    
    std::cout<<sizeof(aa)<<' '<<sizeof(bb)<<' '<<sizeof(cc)<<' '<<sizeof(dd)<<' '<<sizeof(ee)<<std::endl;
    printCode(aa);
    printCode(bb);
    printCode(cc);
    printCode(dd);
    printCode(ee);
}

运行结果:

1 1 2 4 4
code:61
code:61
code:61 00
code:61 00 00 00
4 1 2 4 4
code:97 ad e5 00
code:97
code:57 5b
code:57 5b 00 00
code:57 5b 00 00

有问题可加qq群1032082534讨论

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!