【问题标题】:Is there any way to get char by auto type deduction using decimal ASCII Code?有没有办法使用十进制 ASCII 码通过自动类型推导来获取字符?
【发布时间】:2019-03-26 16:26:48
【问题描述】:

例如 'a' 的 ASCII 码是 97,我们可以使用

char ch = 'a';

char ch = 97;

使用 auto 我们可以写

auto ch = 'a';

第一种情况,但是如何在推演过程中通过数字ASCII码获取char变量?

这对我不起作用:

auto ch = '\97';

【问题讨论】:

  • 注意:'a' 并不表示 ASCII 码 97。编译器将文字字符从 -fsource-charset 转码为 -fexec-charset/source-charset/execution-charset)。这里,“charset”表示字符编码。代码作者、程序构建者和程序用户都应该在同一页面上讨论字符编码。作者经常尝试编写无论代码是为哪个系统构建的都能正常工作的“可移植代码”。许多系统始终使用 Unicode 字符集的 UTF-8 字符编码。
  • 同时需要特定类型和自动听起来很奇怪

标签: c++ c++14 c++17


【解决方案1】:

转义序列必须使用八进制或十六进制值

auto ch  = '\141';
auto ch2 = '\x61';

欲了解更多信息https://en.cppreference.com/w/cpp/language/escape

如果你想使用十进制值,你有两种选择:

  1. 转换为字符

    auto ch = static_cast<char>(97);
    
  2. 用户定义的文字

    char operator "" _ch(unsigned long num)
    {
         return static_cast<char>(num);
    }
    //...
    auto ch = 97_ch;
    

【讨论】:

  • 确实如此。 OP问题的原因是'\97'是无效的八进制。
【解决方案2】:

没有十进制转义,但您可以使用十六进制:'\x61',或八进制,'\141'
如果你真的需要小数,你需要转换; char{97}.

【讨论】:

    【解决方案3】:

    没有指定char 的整数文字。您必须明确命名类型,例如

    auto ch = char{97};
    

    【讨论】:

    • 但是如果 OP 使用了十六进制整数,那么 '\0x61' 可以正常工作。
    【解决方案4】:

    integral literal 投射到char

    auto ch = static_cast<char>(97);
    

    【讨论】:

    • 当我使用 auto 时,重点是不要写 char 或任何大的构造。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    相关资源
    最近更新 更多