如何将int转换为char数组

How to convert int into a char array?

本文关键字:char 数组 转换 int      更新时间:2023-10-16

如果我想编译以下代码:

int x = 8;
int y = 17;
char final[2];
final[0] = (char) x;
final[1] = (char) y%10;
cout << final[0] << final[1] << endl;

它什么也没显示。我不知道为什么?那么,我如何才能成功转换它呢?

(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;

根据您的程序,您将打印char8和char7。它们不可打印。事实上,它们分别是BELL和Backspace字符。只需运行程序并将其重定向到文件即可。然后做一个六进制转储,你会看到打印的内容
./a.out>/tmp/b
hd/tmp/b
0000000008 07 0a||
0000000 3

您需要理解的是,在C++中,字符是数字,就像int一样,只是在较小的范围内。当您将整数8强制转换为char时,C++认为您想要一个包含数字8的char。如果我们看一下我们方便的ASCII表,我们可以看到8是BS(退格),7是BEL(当你把它打印到终端时,它有时会响起铃声)。这两个都不可打印,这就是为什么你什么都看不到的原因。

如果您只想将87打印到标准输出,那么此代码将执行以下操作:

cout << x << (y%10) << endl;

如果你真的需要先转换它的字符,那么不用担心,它仍然可以完成。我不是一个很喜欢C++的人,但这是在C:中实现它的方法

char final[2];
snprintf(final, sizeof final, "%d%d", x, y % 10);

(参见snprintf(3))

此代码将2字符数组视为一个字符串,并使用printf格式字符串将指定的两个数字写入其中。C中的字符串通常以NUL字节结尾,如果将数组扩展为三个字符,则最后一个字符将设置为NUL。但是,因为我们告诉snprintf这个字符串有多长,所以它不会写更多的字符。

这也应该在C++中起作用。