C++中如何将unsigned char正确转换为unsigned int?转换值异常怎么解决?
原因分析
你遇到的现象核心是混淆了字符的显示值和实际存储的ASCII数值:
input_items是二进制文件内容,a[0]实际存储的是字符'7'的ASCII编码,十进制数值为55- 你打印
a[0]时使用了%c这类字符输出格式,所以看到的显示结果是字符7,误以为a[0]的数值是7 - 强制类型转换只会保留变量的实际存储数值,所以
unsigned int类型的b得到的就是原数值55,转换过程本身没有问题。
解决方法
如果要把字符形式的数字转换为对应的整数值,利用ASCII编码中数字字符连续排列的特性,减去字符'0'的数值即可:
unsigned int b = a[0] - '0';
你可以用十进制格式打印a[0]验证实际存储值:
printf("a[0] 实际存储的十进制值:%d\n", a[0]); // 输出结果为55
内容的提问来源于stack exchange,提问作者Mobi Zaman
相关产品推荐
相关产品推荐

