我必须将十六进制转换为十进制值,然后将其乘以10,然后再转换回十进制。 我弄清楚了大部分问题,当我将其乘以10并将其转换回十六进制值时,就会发生问题。
我知道有一种更简单的方法,只需使用char数组即可完成。 我似乎无法弄清楚哪里出了问题。
#include <iostream>
#include <cstring>
using namespace std;
char decToHex(int dec)
{
char hex;
switch (dec)
{
case 0: hex = '0';
break;
case 1: hex = '1';
break;
case 2: hex = '2';
break;
case 3: hex = '3';
break;
case 4: hex = '4';
break;
case 5: hex = '5';
break;
case 6: hex = '6';
break;
case 7: hex = '7';
break;
case 8: hex = '8';
break;
case 9: hex = '9';
break;
case 10: hex = 'A';
break;
case 11: hex = 'B';
break;
case 12: hex = 'C';
break;
case 13: hex = 'D';
break;
case 14: hex = 'E';
break;
case 15: hex = 'F';
}
return hex;
}
void intToHex(int intVal, char hexArr[])
{
int remainder;
int i = 0;
while (intVal > 0)
{
remainder = intVal % 16;
hexArr[i] = decToHex(remainder);
intVal = intVal / 16;
i++;
}
}
int hexToDec(char hex)
{
int dec;
switch (hex)
{
case '0': dec = 0;
break;
case '1': dec = 1;
break;
case '2': dec = 2;
break;
case '3': dec = 3;
break;
case '4': dec = 4;
break;
case '5': dec = 5;
break;
case '6': dec = 6;
break;
case '7': dec = 7;
break;
case '8': dec = 8;
break;
case '9': dec = 9;
break;
case 'A':
case 'a': dec = 10;
break;
case 'B':
case 'b': dec = 11;
break;
case 'C':
case 'c': dec = 12;
break;
case 'D':
case 'd': dec = 13;
break;
case 'E':
case 'e': dec = 14;
break;
case 'F':
case 'f': dec = 15;
}
return dec;
}
int main()
{
char binNum[17];
char hexa[17] = { '\0' };
short age = 23;
cout << "Enter hexadecimal: ";
cin >> binNum;
cout << "You typed: " << binNum << "\n";
int count = strlen(binNum);
double powerVal = 0.0;
int decValue = 0;
for (int i = count - 1; i >= 0 ; i--)
{
cout << hexToDec(binNum[i]) << "\n";
decValue += hexToDec(binNum[i]) * pow(16, powerVal);
powerVal++;
}
cout << "Decimal value is " << decValue << "\n";
intToHex(decValue*10, hexa);
cout << "Hexadecimal is: " << hexa << endl;
return 0;
}