我编写了一个程序,通过对字母使用switch命令将十进制字符串转换为十六进制,但如果我使用char,程序就不能正常工作! 如果没有开关,我就无法处理9以上的数字。我希望你能理解我,因为我的语言不太好。
所以这是我的程序
顺便说一句,如果把它int
代替char
它可以正常工作但它会变成11
而不是B
#include <iostream>
using namespace std;
int main()
{
int n, i, c=0, t;
char a[50];
cout << "Enter a decmail number :\n";
cin >> n;
t = n;
for (i = 0; t > 0; i++)
{
if (a[i] % 16 > 9)
{
switch(a[i])
{
case 10 : a[i] = 'A'; break;
case 11 : a[i] = 'B'; break;
case 12 : a[i] = 'C'; break;
case 13 : a[i] = 'D'; break;
case 14 : a[i] = 'E'; break;
case 15 : a[i] = 'F'; break;
}
}
else
{
a[i] = t % 16;
}
t = t / 16;
}
cout << n << " In hexdecmail = ";
for(c = i - 1; c >= 0; c--)
{
cout << a[c];
}
}
答案 0 :(得分:4)
这里的问题是1与&#39; 1&#39;不同。 1是第一,而&#39; 1&#39;是一个字符常量。要将1转换为&#39; 1&#39;你必须添加&#39; 0&#39;数量。
所以你可以换行
a[i] = t%16;
至a[i] = t%16 + '0';
而不是将if条件和开关案例放在[i]上,你需要把它放在t%16上,因为还没有设置[i]。休息它应该工作正常。
编辑: 要了解从数字到字符常量的对话如何工作,您需要了解字符在内部的表示方式。
每个字符如a-z,A-Z,0-9和特殊字符都分配有0到256之间的数字。该编号称为字符的ASCII值。您可以找到所有ASCII值here的列表。
&#39; 0&#39;的ASCII值是48.&#39; 1&#39;是49岁,&#39; 2&#39;是50等等。现在你拥有的是数字(你得到的是t%16)。说它是3。要转换为ASCII码(51),您必须添加48.同样,0-9之间的所有数字都可以通过添加48转换为其ASCII值。这是因为数字的ASCII值是连续的。
通常很难记住ASCII值48.所以你可以写'&#39; 0&#39;内部意味着48.
我希望这会有所帮助。