我发现,当我在C++17中键入一个字符指针时,我会得到某种映射,而不是我期望的实际数字。下的示例
#include <iostream>
int main () {
char c;
c = '1';
std::cout << int(c) << std::endl;
}
当我用构建和运行这个
g++ file.cpp -o output
./output
我得到
49
"0"映射到48,"2"映射到50,依此类推。为什么?我该如何避免这种情况?
您实际得到的是这些字符的ASCII代码,因为它们以称为ASCII
代码的整数存储在内存中。
要将char变量转换为其十进制值,您可以使用以下命令:
int value = c - '0';
它的作用是,它取c
的整数值,例如"0"为48,并从中减去"0"的整数值(也是48(,得到0。
以下是十进制数字及其相应ASCII值的完整表格:
0 -> 48
1 -> 49
2 -> 50
3 -> 51
4 -> 52
5 -> 53
6 -> 54
7 -> 55
8 -> 56
9 -> 57
当从中减去"0"时,结果是它们相应的十进制值:
0 -> 48 - 48 = 0
1 -> 49 - 48 = 1
2 -> 50 - 48 = 2
3 -> 51 - 48 = 3
4 -> 52 - 48 = 4
5 -> 53 - 48 = 5
6 -> 54 - 48 = 6
7 -> 55 - 48 = 7
8 -> 56 - 48 = 8
9 -> 57 - 48 = 9
我发现,当我在C++17中键入指向的字符指针时某种映射,而不是实际数字
在提供的代码中没有指针。有一个类型为char
的对象。
char c;
c = '1';
此声明
std::cout << int(c) << std::endl;
将字符"1"的内部表示形式输出为整数。在ASCII中,字符'1'
的内部表示形式是十进制49
。在EBCDIC中,字符'1'
的内部表示是241
。
如果你想得到整数1,你可以写例如
std::cout << c - '0' << std::endl;
或者你可以将字符输出为字符,控制台上的输出将与1 相同
std::cout << c << std::endl;