#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(...)是丑陋的,需要更多的工作来修剪多余位。
char a = 0xab;
cout << +a; // promotes a to a type printable as a number, regardless of type.
作为类型提供了一个一元这个工程只要+
与普通语义操作。 如果要定义,它表示的数的一类,以提供与规范语义一元运算符+,创建一个operator+()
简单地返回*this
或者通过值或引用给const。
来源: Parashift.com -我如何打印字符为数字? 如何打印一个char *这样的输出显示指针的数值?
它们转换成整数类型,(并适当位掩码!),即:
#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;
希望能帮助到你。
另一种方式来做到这一点是与标准::十六进制除了铸造(INT):
std::cout << std::hex << (int)myVar << std::endl;
我希望它能帮助。
关于什么:
char c1 = 0xab;
std::cout << int{ c1 } << std::endl;
它的简洁和安全。