将ASCII数字字符转换为实际字符

时间:2013-12-19 06:57:54

标签: c++ binary hex ascii

我正在学习 ASCII ,以及它如何编码字符。根据我的理解(虽然我可能错了,因为我还在学习),但是 ASCII 将数字编码为字符。例如,像这样:

0011 0000 = 30 ='0'(这是一个编码字符)

0000 0000 = 0 = 0 (这是实际数字)

代表两种不同类型的零编码。

问题

有没有办法显示 ASCII char 数据类型的真实数字?

我尝试了以下代码:

#include <iostream>

int main(void) {

    char e = '0';

    std::cout << e << std::endl;
    std::cout << sizeof(e) << std::endl;

    std::cin.get();
    std::cin.get();

return 0;
}

我知道这段代码与我想要完成的结果并不相符;然而,这是我能想到的。我需要更好地理解如何通过C ++语法完成转换

另外,请原谅任何误导性的信息或标题。我仍然在学习编程的“绳索”。

3 个答案:

答案 0 :(得分:5)

char投射到int

std::cout << static_cast<int>(e);

char实际上已经是一个整数,只是operator<<的重载将char显示为一个字符。通过使用强制转换将类型更改为int,我们将导致调用操作符的不同重载,其中一个被写入显示为整数。

答案 1 :(得分:4)

根据我的理解,您希望存储在内存中的实际值为'0'= 0x30 = 48。在内存char中,数据类型也以整数形式存储,但格式为8位。因此,如果您使用int键入转换变量,那么您将获得整数格式的存储值,而不是Ascii char。

#include <iostream>

int main(void) {

    char e = '0';

    std::cout << (int)e << std::endl;
    std::cout << sizeof(e) << std::endl;

    std::cin.get();
    std::cin.get();

return 0;
}

答案 2 :(得分:2)

像这样的东西

#include <iostream>

int main(void) {

    char e = '0';

    std::cout << e - '\0' << std::endl;
    std::cout << sizeof(e) << std::endl;

    std::cin.get();
    std::cin.get();

    return 0;
}

尝试使用char e等于任何字符,它将打印字符的实际值。感谢chris建议另一种方法;这是通过将角色转换为int

std::cout << static_cast<int>(e) << std::endl;