无符号字符打印它的 ascii 值

Unsigned character prints it's ascii value

我有一个 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 : '.');
 }

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

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

此表达式的类型为 int,因为这两种 char 类型都不足以包含另一种类型的所有值。 (如果前面的陈述不完全准确,我深表歉意,我懒得去阅读细则。)

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

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