如何将int转换为char数组?

时间:2015-11-09 02:40:03

标签: c++

如果我想编译以下代码:

int x = 8;
int y = 17;
char final[2];

final[0] = (char) x;
final[1] = (char) y%10;

cout << final[0] << final[1] << endl;

它没有显示任何内容。我不知道为什么?那么我怎样才能成功转换呢?

3 个答案:

答案 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 ++。