如何通过cout输出一个字符为整数?

#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总是把'char','signed char'和'unsigned char'视为字符而不是8位整数。 然而,'char','signed char'和'unsigned char'都是整型。

所以我的问题是:如何通过cout输出一个字符为整数?

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

我知道这个问题很老,但无论如何…

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

只要types为普通语义提供了一元+运算符,就可以工作。 如果你正在定义一个代表数字的类,为了给一个+运算符提供规范的语义,可以创build一个运算符+(),它只是通过值或者引用const来返回*。

来源: Parashift.com – 我怎样才能打印一个字符作为一个数字? 我怎样才能打印一个字符*,所以输出显示指针的数值?

将它们转换为整数types(适当的位掩码)即:

 #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; } 

也许这个:

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

希望它有帮助。