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

2025-01-02 18:02:39
推荐回答(5个)
回答1:

首先你要清楚,在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进制

回答2:

目前绝大多数编译器,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; 。

回答3:

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

回答4:

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

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

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

回答5:

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

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

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