C++中的int和char之间的转换问题

我以前就认为是这样的,比如inta;charb;a=(int)b;b=(char)a;可是这样转换出来的是错误的,何解啊;我知道char转换为int的可以这样a=b-'0... 我以前就认为是这样的,比如
int a;
char b;
a=(int)b;
b=(char)a;
可是这样转换出来的是错误的,何解啊;
我知道char转换为int的可以这样 a=b-'0';
还有其他的方法互相转换.
如果告诉我转化的机理那更好了,肯定加分
展开
 我来答
百度网友42d289a
2009-08-26 · TA获得超过239个赞
知道答主
回答量:96
采纳率:0%
帮助的人:134万
展开全部
首先你要清楚,在C++中int型占4个字节,而char类型只占1个字节,char类型是可以转化为int类型的,但int类型不一定可以转换为char类型。

我对你这个问题的理解是,你想将0到9之间的数字转化为char类型的,或是将'0'-'9'之间的字符转化为int型的数字。

你如果要用强制转换的话可以这样:(0的ASCII码是48)
int a;
char b;
a=(int)(b-48);或b=(char)(a+48);
//这样转化的前提是a的范围是0-9,b的范围是'0'-'9'

在实际运用中,在整型和字符型之间转化用得较多的应该要算int型与char *类型之间的转化了。这个时候可以用atoi(字符型转整型,可以分开理解a to i)和itoa(整型转字符型,i to a),如:
int a=11111
char* b="33333";
a=atoi(b);//将整型转化为字符串

itoa(a,b,10);//将字符串转化为整型,最后一个参数是进制,在这里是10进制
cwj1316
2009-08-26 · TA获得超过550个赞
知道小有建树答主
回答量:214
采纳率:0%
帮助的人:300万
展开全部
目前绝大多数编译器,int 型数据占 4 字节, char 型占 1 字节。进行不同数据的强制转换其实就是数据占用字节扩充或者截断。
比如
int a;
char b;
a=(int)b;
b=(char)a;
由 b 转换成 int 型数据就是将 b 扩充 3 个字节;而将 a 转换成 char 型数据就是将 a 的最低位字节截取出来。因此,将数据由值域较宽类型强制转换到值域较窄类型时,有可能出现数据信息丢失。

你说的转换错误其实不然,因为 char 型数据在机器里通过 ASCII 码存储,也就是用一个整数存储的。譬如字符 ' 0 ',对应的 ASCII 码的十进制数 是 48,因此强制转换成 int 后,是 48,而不是 0 。要想将字符 '0' 转换成整数 '0',就要使用你所说的 a = b - '0'; 或者 a = b - 48; 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LuoJi_1995
推荐于2017-09-23 · TA获得超过1714个赞
知道小有建树答主
回答量:613
采纳率:0%
帮助的人:764万
展开全部
这要用到ASCII码的知识,粗略讲一下

字符'0'的ASCII码为48,然后是'1' '2' '3' ... '9'

字符' '(空格)的ASCII码为32.

字符'A'的ASCII码为65,然后是'B' 'C' ... 'Z'

字符'a'的ASCII码为97,然后是'b' 'c' ... 'z'

所以,把一个数字字符ch,转为一个整数,就是ch-'0'当然ch-48也行

因为C和C++中,字符和整型是一样的,可以隐式转换
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jeecpp
2009-08-26
知道答主
回答量:31
采纳率:0%
帮助的人:0
展开全部
int型和char型的长度不一样。int占4个字节而char只占一个字节(大小视系统而定的),所以char转int没问题,反过来就可能出错了

字母有对应的的ASCII码,所以a = b - '0'就是通过ASCII码转换为数字的

int型也可以直接赋值给char型,同样是按照ASCII码来的,但由于int长度比char长,因此超过范围则转换出来的值可能是不定的(根据编译器不同而不同),所以一般最好不要这么转换
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
牵牛散步
2009-08-26
知道答主
回答量:12
采纳率:0%
帮助的人:0
展开全部
第一,int型和char型的长度不一样。int占4个字节而char只占一个字节。

第二,char型可以直接赋值给int型,值的大小是char字符对应的ASCII码值,例如: b = 'a'; a = b; 则a的值应该是97。

第三,int型也可以直接赋值给char型,同样是按照ASCII码来的,但由于int长度比char长,因此只有在int的值处在ASCII码范围内的时候转换后的值才是有意义的,如果超过范围则转换出来的值可能是不定的(根据编译器不同而不同),在VC6下是0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式