[英]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.