繁体   English   中英

如何在C ++中将int变量转换为char?

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

谁能帮忙吗?

尝试使用itoasprintf

如果您使用的是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之类的版本,以获得更完整的版本。

有两种方法:

  1. 使用itoa()
  2. 给每个数字加0x30(=='0')

当然,第二种方法仅适用于个位数,因此在一般情况下,您宁愿使用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.

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