2017-02-28 135 views
1

我编写了一个程序,通过使用开关命令将十进制字符串转换为十六进制字符,但如果使用char,程序不能正常工作! 没有开关我不能处理9以上的数字..我希望你明白我的意思,因为我的语言不太好。将十进制转换为十六进制的C++程序

所以这是我的计划

顺便说一句,如果把它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]; 
    } 
} 
+2

'a [i] = t%16;'==>'a [i] = t%16 +'0';'获取数字的ascii值。 – mch

+0

既然你把它标记为C++,你可以使用'std :: hex'操纵器。 –

+0

这已经在这里解答 - http://stackoverflow.com/questions/3464194/how-can-i-convert-an-integer-to-a-hexadecimal-string-in-c –

回答

4

这里的问题是,1是不一样的“1 ”。 1是数字1,而'1'是字符常量。要将1转换为'1',您必须将数字加上'0'。 所以,你可以改变线 a[i] = t%16;a[i] = t%16 + '0';

而且不是把if条件,并在[I]开关的情况下,你需要把它放在T%16,因为A [1]还不组。休息它应该工作得很好。

编辑: 要理解从数字到字符常量的对话如何工作,您需要了解字符在内部如何表示。

每个字符如a-z,A-Z,0-9和特殊字符分配一个介于0和256之间的数字。该编号称为字符的ASCII值。您可以找到所有ASCII值的列表here

'0'的ASCII值是48.那'1'是49,'2'是50等等。现在你所拥有的是数字(你通过做t%16得到)。说它是3。要转换为ASCII码(51),您必须添加48.同样,0-9之间的所有数字都可以通过添加48转换为它们的ASCII值。这是因为数字的ASCII值是连续的。

往往是很难记住的ASCII值48,因此,你可以只写“0”,这意味着内部48.

我希望这有助于。

+0

我会详细说明,谢谢你的建议。 –

相关问题