在最近一段时间的学习中,我尝试编写一段十进制转换任意常用进制的代码,一切都运行的很顺利——然而当我测试十六进制部分时,它什么都没有输出!
这是为什么呢?原来是我搞错了(char)的用法
char sH[2]; //定义一个数组储存十六进制数
char H_need[6] = {'A', 'B', 'C', 'D', 'E', 'F'}; //定义数组H_need来储存十六进制必要的字母
for (int i = 0; i < 2; i++)
{
anum = Dnum % 16;
Dnum /= 16;
if (anum < 10)
{
sH[i] = (char)anum;
}else
{
sH[i] = H_need[anum - 10];
}
}
cout << "你想要的数为:";
for (int j = 1; j > -1; j--)
{
cout << sH[j];
}
众所周知,在C++中,存在着名为“强制转换”的功能
然而,与C语言不同的是,C++为了避免一些人为错误的出现,所以对强制转换做出了明确的语法规范
当然了,这与我们的问题无关,因为(char)不应该被看成一个强制转换符,而是应该视作一个内置函数
(char)(‘0’+*)的格式,允许我们转出一个字符型数据,这个数据与ASCII码是对应的,别忘了,char实际上也是一个储存“数”的变量,所以,我们这个代码应该这样改
sH[i] = (char)('0' + anum);
这样一来,就可以实现了