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';
还有其他的方法互相转换.
如果告诉我转化的机理那更好了,肯定加分 展开
int a;
char b;
a=(int)b;
b=(char)a;
可是这样转换出来的是错误的,何解啊;
我知道char转换为int的可以这样 a=b-'0';
还有其他的方法互相转换.
如果告诉我转化的机理那更好了,肯定加分 展开
9个回答
展开全部
首先你要清楚,在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进制
我对你这个问题的理解是,你想将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进制
展开全部
目前绝大多数编译器,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; 。
比如
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; 。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这要用到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++中,字符和整型是一样的,可以隐式转换
字符'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型和char型的长度不一样。int占4个字节而char只占一个字节(大小视系统而定的),所以char转int没问题,反过来就可能出错了
字母有对应的的ASCII码,所以a = b - '0'就是通过ASCII码转换为数字的
int型也可以直接赋值给char型,同样是按照ASCII码来的,但由于int长度比char长,因此超过范围则转换出来的值可能是不定的(根据编译器不同而不同),所以一般最好不要这么转换
字母有对应的的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
第二,char型可以直接赋值给int型,值的大小是char字符对应的ASCII码值,例如: b = 'a'; a = b; 则a的值应该是97。
第三,int型也可以直接赋值给char型,同样是按照ASCII码来的,但由于int长度比char长,因此只有在int的值处在ASCII码范围内的时候转换后的值才是有意义的,如果超过范围则转换出来的值可能是不定的(根据编译器不同而不同),在VC6下是0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询