C++ 使用std::cout打印分配给十六进制值的字符时出现奇怪的输出

C++ 使用std::cout打印分配给十六进制值的字符时出现奇怪的输出,c++,types,char,hex,iostream,C++,Types,Char,Hex,Iostream,我正在尝试打印这些数据类型。但是我得到了一个非常奇怪的输出,而不是我所期望的 #包括 使用名称空间std; 内部主(空) { char data1=0x11; int data2=0xFFFFEEE; 字符数据3=0x22; 短数据4=0xABCD; CUT最有可能的是,DATA1和DATA3被打印为某种数字。然而,数据类型是字符,这就是C++(或C)将它们解释为字符的原因,将0x11映射到相应的ASCII字符(控制字符),类似于0x22,除了一些其他字符(见ASCII表)。 如果要将这些字符打

我正在尝试打印这些数据类型。但是我得到了一个非常奇怪的输出,而不是我所期望的

#包括
使用名称空间std;
内部主(空)
{
char data1=0x11;
int data2=0xFFFFEEE;
字符数据3=0x22;
短数据4=0xABCD;

CUT

最有可能的是,DATA1和DATA3被打印为某种数字。然而,数据类型是字符,这就是C++(或C)将它们解释为字符的原因,将0x11映射到相应的ASCII字符(控制字符),类似于0x22,除了一些其他字符(见ASCII表)。 如果要将这些字符打印为数字,则需要先将它们转换为

int
,然后再像这样打印出来(适用于C和C++):


你期望什么输出?因为我期望一个不可见的字符,
-4370
-21555
(我假设
int
是32位,
short
是16位,字符编码是ASCII兼容的)你必须“告诉”“如果您想以十六进制打印数据,您的计算机如何打印该数据……这是否回答了您的问题?您的
(int)有什么意义?”DATA1版本?你正在打印一个代码> STD::OsStase。无论如何,C是不可能的。有很多点:它是在C++中编写的一种合法方式。有些人还是喜欢某些情况下的旧样式的C(这是否有意义是不同的讨论)。.使用C语言的人会很聪明,知道应该使用
printf
cout << (int)data1 << endl;
cout << static_cast<int>(data1) << endl;
cout << hex << static_cast<int>(data1) << endl;