繁体   English   中英

如何将int转换为char数组?

[英]How to convert int into a char array?

如果我要编译以下代码:

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;

根据您的程序,您正在打印char 8和char7。它们不可打印。 实际上,它们分别是BELL和Backspace字符。 只需运行您的程序并将其重定向到文件即可。 然后做一个十六进制转储,您将看到打印的内容。
./a.out> / tmp / b
高清/ tmp / b
00000000 08 07 0a | ... |
00000003

您需要了解的是,在C ++中,字符是数字 ,就像整数一样,只是在较小的范围内。 当您将整数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 ++中也应该起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM