我正在学习 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 ++语法完成转换。
另外,请原谅任何误导性的信息或标题。我仍然在学习编程的“绳索”。
答案 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;