使用std :: cout打印分配给十六进制值的char时输出奇怪

问题描述

我正在尝试打印这些数据类型。但是我得到的输出很奇怪,而不是我的预期。

lst = ["S1","S1","L","L"]

limit = 2
value = "L"

new_lst = []
counter = 0
for i in lst:
    if counter == limit and i == value:
        continue
    if i == value:
        counter += 1
    new_lst.append(i)

print(new_lst)

解决方法

您很有可能希望将data1和data3打印为某种数字。但是,数据类型是字符,这就是为什么C ++(或C)将它们解释为字符,将0x11映射到相应的ASCII字符(控制字符)的原因,除了一些其他字符(请参见ASCII表)以外,对于0x22也是如此。 如果要将这些字符打印为数字,则需要先将它们转换为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;