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

来源:百度知道 编辑:UC知道 时间:2024/05/16 09:46:10
我以前就认为是这样的,比如
int a;
char b;
a=(int)b;
b=(char)a;
可是这样转换出来的是错误的,何解啊;
我知道char转换为int的可以这样 a=b-'0';
还有其他的方法互相转换.
如果告诉我转化的机理那更好了,肯定加分

int型和char型的长度不一样。int占4个字节而char只占一个字节(大小视系统而定的),所以char转int没问题,反过来就可能出错了

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

int型也可以直接赋值给char型,同样是按照ASCII码来的,但由于int长度比char长,因此超过范围则转换出来的值可能是不定的(根据编译器不同而不同),所以一般最好不要这么转换

第一,int型和char型的长度不一样。int占4个字节而char只占一个字节。

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

第三,int型也可以直接赋值给char型,同样是按照ASCII码来的,但由于int长度比char长,因此只有在int的值处在ASCII码范围内的时候转换后的值才是有意义的,如果超过范围则转换出来的值可能是不定的(根据编译器不同而不同),在VC6下是0

这要用到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++中,字符和整型是一样的,可以隐式转换

目前绝大多数编译器,int 型数据占 4 字节, char 型占 1 字节。进行不同数据的强制转换其实就是数据占用字节扩充或者截断。