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

时间:2010-06-24 08:58:10

标签: 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。

任何人都可以帮忙吗???

6 个答案:

答案 0 :(得分:4)

尝试使用itoasprintf

事件更好,假设您正在使用C ++,请尝试使用stringstream。然后,您可以按照以下步骤进行操作

std::stringstream stream;
stream << x << y;

答案 1 :(得分:4)

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值。

答案 2 :(得分:1)

或者,更通用的

template <class T> string toString (const T& obj)
    {
    stringstream ss;
    ss << obj;
    return ss.str();
    }

答案 3 :(得分:1)

像nico的解决方案就是你应该使用的东西(如果你有提升,也可以参见boost :: lexical_cast),但是如果想直接回答你的问题(如果你想了解更低级别的事情,例如), string [9,8,\ 0]不是“98”。

“98”实际上是ASCII中的[57,56,0]或[0x39,0x38,0x0]。如果你想手动连接从0到9的十进制数,你必须向它们添加'0'(0x30)。如果您想处理超出该范围的数字,您将需要做更多工作来提取每个数字。总的来说,您应该使用类似toString函数模板nico posted或boost :: lexical_cast的更完整版本。

答案 4 :(得分:0)

有两种方法:

  1. 使用itoa()
  2. 将0x30(=='0')添加到每个数字
  3. 当然第二种方法仅适用于单个数字,所以在一般情况下你宁愿使用itoa()

答案 5 :(得分:0)

a[0] = (char)x; 
a[1] = (char)y; 

应该是

a[0] = x + '0'; 
a[1] = y + '0'; 

(如果你想禁用警告,请保留演员表)/