[英]How to cast an int variable to char in C++?
char a[3];
int x=9;
int y=8;
a[0]=(char)x;
a[1]=(char)y;
a[2]='\0';
unsigned char * temp=(unsigned char*)a;
但是当我显示此温度时,显示的是?8。 应该显示98。
谁能帮忙吗?
如果您使用的是C ++,则最好使用stringstream 。 然后,您可以按照以下步骤进行操作
std::stringstream stream;
stream << x << y;
char a[3];
int x='9';
int y='8';
a[0]=(char)x;
a[1]=(char)y;
a[2]='\0';
unsigned char * temp=(unsigned char*)a;
printf("%s", temp);
您提供的值为9和8,而不是它们的ASCII值。
或者,更通用
template <class T> string toString (const T& obj)
{
stringstream ss;
ss << obj;
return ss.str();
}
类似于nico的解决方案是您应该使用的解决方案(如果您具有boost,也请参见boost :: lexical_cast),但是对于您的问题的直接答案(例如,如果您想了解较低级别的内容),字符串[9 ,8,\\ 0]不是“ 98”。
“ 98”实际上是ASCII中的[57,56,0]或[0x39,0x38,0x0]。 如果要以这种方式手动连接从0到9的十进制数字,则必须在它们之间添加'0'(0x30)。 如果要处理超出该范围的数字,则必须做更多的工作来提取每个数字。 总的来说,您应该使用类似toString函数模板nico posted或boost :: lexical_cast之类的版本,以获得更完整的版本。
有两种方法:
itoa()
当然,第二种方法仅适用于个位数,因此在一般情况下,您宁愿使用itoa()
。
a[0] = (char)x;
a[1] = (char)y;
应该
a[0] = x + '0';
a[1] = y + '0';
(如果要禁用警告,请保留演员表)/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.