在C语言中如何将整数转字符?为何两种转换方式结果不同?
整数转字符'7'的两种写法差异原因
这俩写法的核心区别在于是否正确利用了ASCII编码的规则:
正确写法的逻辑
int a = 7; char b = a + '0'; write(1,&b,1);
ASCII编码里,数字字符'0'到'9'是连续排列的:'0'的ASCII值是48,'1'是49,以此类推,'7'的ASCII值就是48+7=55。
这里把整数7加上'0'的ASCII值,刚好得到字符'7'对应的ASCII码,所以write输出的就是可打印的数字字符'7'。
错误写法的问题
int a = 7; char b = (char) a; write(1,&b,1);
这里直接把整数7强制转换成char,相当于让b存储的是ASCII值为7的字符。而ASCII值7对应的是控制字符(响铃符BEL),它不是可打印的数字字符,所以执行这段代码要么看不到任何输出,要么会触发终端的响铃提示,根本打不出'7'。
简单说:前者是把整数数字映射到对应的数字字符编码,后者是把整数直接当字符编码用,而7对应的编码根本不是数字'7'。
内容的提问来源于stack exchange,提问作者tabaluga
相关产品推荐
相关产品推荐

