如何输出字符通过COUT整数?(How to output a character as an in

2019-07-19 03:12发布

#include <iostream>

using namespace std;

int main()
{  
    char          c1 = 0xab;
    signed char   c2 = 0xcd;
    unsigned char c3 = 0xef;

    cout << hex;
    cout << c1 << endl;
    cout << c2 << endl;
    cout << c3 << endl;
}

我预计产量如下:

ab
cd
ef

然而,我什么也没得到。

我想这是因为COUT始终把“字符”,“符号的字符”和“无符号的字符”作为字符,而不是8位整数。 然而,“字符”,“符号的字符”和“无符号的字符”都是整数类型。

所以我的问题是:如何输出字符通过COUT整数?

PS:的static_cast(...)是丑陋的,需要更多的工作来修剪多余位。

Answer 1:

char a = 0xab;
cout << +a; // promotes a to a type printable as a number, regardless of type.

作为类型提供了一个一元这个工程只要+与普通语义操作。 如果要定义,它表示的数的一类,以提供与规范语义一元运算符+,创建一个operator+()简单地返回*this或者通过值或引用给const。

来源: Parashift.com -我如何打印字符为数字? 如何打印一个char *这样的输出显示指针的数值?



Answer 2:

它们转换成整数类型,(并适当位掩码!),即:

#include <iostream>

using namespace std;

int main()
{  
    char          c1 = 0xab;
    signed char   c2 = 0xcd;
    unsigned char c3 = 0xef;

    cout << hex;
    cout << (static_cast<int>(c1) & 0xFF) << endl;
    cout << (static_cast<int>(c2) & 0xFF) << endl;
    cout << (static_cast<unsigned int>(c3) & 0xFF) << endl;
}


Answer 3:

也许这:

char c = 0xab;
std::cout << (int)c;

希望能帮助到你。



Answer 4:

另一种方式来做到这一点是与标准::十六进制除了铸造(INT):

std::cout << std::hex << (int)myVar << std::endl;

我希望它能帮助。



Answer 5:

关于什么:

char c1 = 0xab;
std::cout << int{ c1 } << std::endl;

它的简洁和安全。



文章来源: How to output a character as an integer through cout?