如何通过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;
希望它有帮助。