如果我想编译以下代码:
int x = 8;
int y = 17;
char final[2];
final[0] = (char) x;
final[1] = (char) y%10;
cout << final[0] << final[1] << endl;
它没有显示任何内容。我不知道为什么?那么我怎样才能成功转换呢?
答案 0 :(得分:4)
(char)8
不是'8'
,而是ASCII值8(退格符)。要显示角色8,您可以将其添加到'0'
:
int x = 8;
int y = 17;
char final[2];
final[0] = '0' + x;
final[1] = '0' + (y%10);
cout << final[0] << final[1] << endl;
答案 1 :(得分:1)
根据你的程序,你打印char 8和char 7。
它们不可打印。实际上它们分别是BELL和Backspace字符。
只需运行程序并将其重定向到文件即可。
然后做一个hexdump,你会看到打印的内容
./a.out>的/ tmp / B
hd / tmp / b
00000000 08 07 0a | ... |
00000003
答案 2 :(得分:1)
您需要了解的是,在C ++中,字符是数字,就像整数一样,只是在较小的范围内。当您将整数8转换为char时,C ++认为您需要一个包含数字的字符.8。如果我们查看handy ASCII table,我们可以看到8是BS(退格)和7是BEL(当你将它打印到终端时有时会响铃)。这些都不是可打印的,这就是为什么你没有看到任何东西。
如果您只想将87
打印到标准输出,那么此代码将执行此操作:
cout << x << (y%10) << endl;
如果你真的需要先将它转换为chars,那么不要担心,它仍然可以完成。我不是一个C ++人,但这是在C中做到的方式:
char final[2];
snprintf(final, sizeof final, "%d%d", x, y % 10);
(见snprintf(3))
此代码将2-char数组视为字符串,并使用printf
格式字符串将您指定的两个数字写入其中。 C中的字符串通常以NUL字节结尾,如果将数组扩展为三个字符,则最终字符将设置为NUL。但是因为我们告诉snprintf
字符串有多长,它不会写出比它更多的字符。
这也适用于C ++。