将十进制转换为十六进制的C ++程序

时间:2017-02-28 16:30:10

标签: c++ hex decimal converter

我编写了一个程序,通过对字母使用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];
    }
}

1 个答案:

答案 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.

我希望这会有所帮助。