在C++中从char到int的类型转换 - 奇怪的价值

use*_*252 0 c++ casting

我无法弄清楚为什么这个结果是未定义的行为或其所谓的?

 char ch[10];
 strcpy(ch, "street1-3");

 char ch2 = ch[6];

 cout << ch2 << endl;
 int n = (int) ch2;
 n = n * 12;
 cout << n << endl;
Run Code Online (Sandbox Code Playgroud)

这是cout首先打印出street1-3的位置6为"1".然后当我试图将这个char类型转换为int时,该值变为不是它预期的值,即12,而不是588.

在consolewindow中输出

 1
 588
Run Code Online (Sandbox Code Playgroud)

在类型转换中我做错了什么,它是如何解决的?

Luc*_*ore 8

该字符'1'没有ascii值1.所以(int)'1' != (int)1.

如果你看一个ASCII表,你会看到'1' == 49,巧合(或不是......)49*12 == 588.