将char类型转换为int C++



我发现,当我在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;

最新更新