强制转换类型,出错。

litter_bird 2012-12-29 06:33:20
我学的是C语言,我想把一个整型数转换为字符串,用了强制转换(char),但是结果和我想的不一样。
求大神指导,另外有没有什么函数可以实现?
...全文
276 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxldfang 2012-12-30
  • 打赏
  • 举报
回复
整数是4个字节,而char是一个字节,比如: int a=0x123456ef; char c=(char)a; // 转换时只会把a低字节的值赋值给c,即c=0xef 由于c是有符号的数据,而0xef=1110 1111,最高位是1,所以是个负数,即-65.
sanxinndsc 2012-12-30
  • 打赏
  • 举报
回复
学习了!!
PIE 2012-12-30
  • 打赏
  • 举报
回复
引用 4 楼 heis07w 的回复:
1.itoa是你要找的函数; 2.强行化成char离你的预期很远,char是字符不是字符串,强行转char只会取int第一个字节的ascii码而已。
疯狂的红豆 2012-12-30
  • 打赏
  • 举报
回复
你是怎么强制转换为char的,我觉得1L的作法还挺好的,不过这是自己实现的,而且1L的最开始做一个正负号判断会省下很多代码的。 char虽说是字符类型,但是在计算机存储的仍然是整数(0~255),不信你做这个实验 char ch = 321; printf("%c",ch); printf("%d",ch); 输出显示的是 A 65。 因为321赋给一个字符后会被截断,省下的是65,以%c输出则是输出65对应的字符那即是A。 有专门的转换函数,就是2L给出的函数,我试了试,可以
AnYidan 2012-12-30
  • 打赏
  • 举报
回复
引用 4 楼 heis07w 的回复:
1.itoa是你要找的函数; 2.强行化成char离你的预期很远,char是字符不是字符串,强行转char只会取int第一个字节的ascii码而已。
++
东大坡居士 2012-12-29
  • 打赏
  • 举报
回复
你的整型是不是超过255了,char只到255噢,多了会截掉的
heis07w 2012-12-29
  • 打赏
  • 举报
回复
1.itoa是你要找的函数; 2.强行化成char离你的预期很远,char是字符不是字符串,强行转char只会取int第一个字节的ascii码而已。
zhcosin 2012-12-29
  • 打赏
  • 举报
回复
C语言的转换都有一个原则:不改变二进制位,只改变对位的解释。
zhcosin 2012-12-29
  • 打赏
  • 举报
回复
用 sprintf 函数:

int n = 2636436;
char str[32];
sprintf(str, "%d", n);
强制转换不是你那么用的。
pengfoo 2012-12-29
  • 打赏
  • 举报
回复
整数化成字符串 给定一个整数(有可能是负数),将整数变成字符串。函数已经声明好类似void change(int number, char s[])的形式。可以自己写用例测试。 给出代码给你参考:
#include <stdio.h>
#include <string.h>

void change(int number, char s[])
{
	int m;
	int i;
	char tmp[50];
	if(number>0)
	{
		m=0;
		while(number>0)
		{
			tmp[m]=number%10+'0';
			number=number/10;
			m++;
		}
		tmp[m]='\0';
		for(i=0;i<m;i++)
		{
			s[m-1-i]=tmp[i];
		}
		s[m]='\0';
	}
	else if(number<0)
	{
		number=-number;
		m=0;
		while(number>0)
		{
			tmp[m]=number%10+'0';
			number=number/10;
			m++;
		}
		tmp[m]='\0';
		for(i=0;i<m;i++)
		{
			s[m-i]=tmp[i];
		}
		s[0]='-';
		s[m+1]='\0';
	}
	else
	{
		s[0]='0';
		s[1]='\0';
	}

}
int main(/*int argc, char **argv*/)
{
	int number=-7782347;
	char s[50]={0};
	change(number,s);
	printf("%s\n ",s);

	system("pause");
	return 0;
}

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧