首页 > 解决方案 > 使用 std::cout 打印分配给十六进制值的字符时的奇怪输出

问题描述

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

#include <iostream>

using namespace std;

int main(void)
{
    char data1 = 0x11;
    int data2 = 0XFFFFEEEE;
    char data3 = 0x22;
    short data4 = 0xABCD;   
    cout << data1 << endl;
    cout << data2 << endl;
    cout << data3 << endl;
    cout << data4 << endl;
}

标签: c++typescharhexiostream

解决方案


您很可能希望 data1 和 data3 打印为某种数字。但是,数据类型是字符,这就是为什么 C++(或 C)会将它们解释为字符,将 0x11 映射到相应的 ASCII 字符(控制字符),类似于 0x22,除了一些其他字符(参见 ASCII 表)。如果要将这些字符打印为数字,则需要int在打印之前将它们转换为(适用于 C 和 C++):

cout << (int)data1 << endl;

或者更多的 C++ 风格是:

cout << static_cast<int>(data1) << endl;

如果要以十六进制显示数字,则需要使用hexIO 操纵器更改默认输出基数。之后,所有输出都以十六进制完成。如果要切换回十进制输出,请使用dec. 有关详细信息,请参阅cppreference.com

cout << hex << static_cast<int>(data1) << endl;

推荐阅读