c++ - 使用 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;
}
解决方案
您很可能希望 data1 和 data3 打印为某种数字。但是,数据类型是字符,这就是为什么 C++(或 C)会将它们解释为字符,将 0x11 映射到相应的 ASCII 字符(控制字符),类似于 0x22,除了一些其他字符(参见 ASCII 表)。如果要将这些字符打印为数字,则需要int
在打印之前将它们转换为(适用于 C 和 C++):
cout << (int)data1 << endl;
或者更多的 C++ 风格是:
cout << static_cast<int>(data1) << endl;
如果要以十六进制显示数字,则需要使用hex
IO 操纵器更改默认输出基数。之后,所有输出都以十六进制完成。如果要切换回十进制输出,请使用dec
. 有关详细信息,请参阅cppreference.com。
cout << hex << static_cast<int>(data1) << endl;
推荐阅读
- c++ - 如何快速用另一个字符替换字符串中的字符(我认为测试不需要通用方式)
- python - 不熟悉的 Python 语法(例如 obj1 =
( )(obj2)) - c# - 将 func 参数类型转换为对象类型
- powershell - 如何构建一个可以定期从 Internet 获取内容并使用 PowerShell 将其保存到每个新的 csv 文件的脚本?
- flutter - 为什么 Flutter App 在 Chrome 中打开而不是在模拟器上打开?
- python - 在 Python 中导入程序时,如何使某些变量无法访问?
- javascript - 如何在使用 iframe 创建的所见即所得编辑器中禁用内联 css 输入?
- php - 如何根据 url 隐藏 Wordpress 中的部分(页眉和页脚)?
- vue.js - VueJS - 如何在传递值其他选项值时显示输入文本以及选择的选项
- php - 为什么在调试过程中mysqli->$errno 被设置为0?