【问题标题】:Unsigned character prints it's ascii value无符号字符打印它的 ascii 值
【发布时间】:2020-06-16 12:20:22
【问题描述】:

我有一个 C++ 程序,它逐字节地读取二进制文件,然后将其作为字符输出到控制台。

使用unsigned char作为类型后,控制台会打印出它的ascii值,这是我没想到的。

如何让它打印字符而不是它的 ascii 值?

可重现的代码:

#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    unsigned char a;
    a = 'A';
    cout << (a > 31 ? a : '.');
 }

【问题讨论】:

标签: c++ utf-8 char cout unsigned


【解决方案1】:

最新的问题是由条件表达式中的类型混合引起的。

unsigned char a;
...
cout << (a > 31 ? a : '.');

这个表达式的类型是 int,因为这两个 char 类型都不够大,不能包含另一个的所有值。 (很抱歉,如果前面的陈述不完全准确,我不会费心阅读细则。)

只需强制转换一个字符,以便条件表达式的两种结果类型相同,例如a &gt; 31 ? a : (unsigned char)'.'.

【讨论】:

    【解决方案2】:

    你不能像使用 cout 31 ? a : '.'); 将它转换为 char ,你可以只打印 cout (char)(a > 31 ? a : '.'); .

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 2022-08-23
      • 2013-11-19
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 2020-02-01
      相关资源
      最近更新 更多