我必须将十六进制转换为十进制值,然后将其乘以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;
}

===============>>#1 票数:2 已采纳

intToHex函数中,您将字符反向插入数组。 试试这个代码:

#include <iostream>
#include <cstring>
#include <math.h>
#include <stack>
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;
  int j = 0;
  stack <char> s;
  while (intVal > 0) {
    remainder = intVal % 16;
    s.push(decToHex(remainder));
    intVal = intVal / 16;
  }
  while (!s.empty()) {
    hexArr[i] = s.top();
    s.pop();
    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;
}

===============>>#2 票数:1

如果要创建自己的函数,请使用移位运算符。 此示例将处理32位数字。

std::string hex(int value)
{
    std::string result;
    std::string hexmap = "0123456789ABCDEF";

    int n[8];
    for (int i = 0; i < 8; i++)
    {
        n[i] = value & 0xF;
        value >>= 4;
    }
    for (int i = 7; i >= 0; i--)
        result += hexmap[n[i]];
    return result;
}

long hex(const std::string &str)
{
    std::string hexmap = "0123456789ABCDEF";
    long result = 0;
    int shift = 0;
    for (int i = str.length() - 1, n = 0; i >= 0; i--, n++)
    {
        size_t d = hexmap.find(str[i]);
        if (d == std::string::npos)
            return 0;//handle error
        result += (d << shift);
        shift += 4;
    }
    return result;
}

但是,标准的C ++方法是使用std::stringstreamstd::stol 例:

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>

std::string hex(int i)
{
    std::stringstream ss;
    ss << std::hex << "0x" << i;
    std::string str = ss.str();
    return str;
}

long hex(const std::string &str)
{
    long result = 0;
    try {
        result = std::stol(str, 0, 16);
    }
    catch (...) {
        //handle error
    }
    return result;
}

int main()
{
    std::cout << hex(0xABCD) << "\n";
    std::cout << hex("10") << "\n";
    return 0;
}

  ask by Emanuel Carmona translate from so

未解决问题?本站智能推荐:

2回复

二进制转换中的十六进制与十进制

例如,这是设置整数变量(例如C ++)的两种方法: 哪个语句将编译更快实际位设置为整数值? 编辑 :*编译从执行更改。 我假设到二进制的转换是在执行时,但考虑到@muntoo的回答,似乎是在编译时
1回复

十进制转换为十六进制-反转十六进制值

我需要用一个int调用byteSwap(),然后将其转换为十六进制并反转十六进制。 例如 byteSwap(2030)或7ee(十六进制)应返回ee7。 该程序还执行其他一些操作,我想使用reverse()在byteSwap()中进行反转。 我尝试在byteSwap()中使用几个不同的循
1回复

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

我编写了一个程序,使用对字母的切换命令将十进制字符串转换为十六进制,但是如果使用char,该程序将无法正常运行! 没有切换,我将无法处理高于9的数字。我希望您能理解我,因为我的语言不太好。 所以这是我的程序 顺便说一句,如果将它设置为int而不是char它可以正常工作,但是它变成1
2回复

十六进制到十进制转换的未明确答案

我写的从十六进制到十进制数字的转换是有效的,但会得到一些意外的结果。 预期结果:十六进制数字“ 0000000F”,输出为十进制“ 15” 就我而言 1]如果“ 0000000F”是十六进制值,并且其转换为“ 1532” 2]如果“ 000000FF”是十六进制值,并且其
6回复

将十六进制转换为十进制

我正在寻找一种方法将hex (十六进制)转换为dec (十进制) 。 我找到了一个简单的方法,如: 但有了这个我不能输入265 。 无论如何它是这样的: 输入: 265 输出: 613 反正有吗? 注意:我试过了: 它不起作用。
1回复

将void *十六进制转换为十进制整数

您好,我需要您的帮助将void *(十六进制数字)转换为十进制数字。 我在代码中使用了sqlite3,回调函数给了我一个&data,其中包含行数。 问题是:我需要将&data(十六进制数字)保存为int。 也许有另一种方法可以执行此操作,但是我尝试将&data十六进制转换为十进制int,问
3回复

将十进制转换为十六进制C ++

我有这段代码,但它似乎只打印十六进制转换的最后4个字符。 输入 :3219668508 输出 :3e1c 预期输出:bfe83e1c 救命?
2回复

如何将十六进制转换为十进制[关闭]

我需要进行这种转换,但是没有任何线索。 有人能帮我吗? 我需要它来完成基本转换的计算器。 我还需要该函数返回一个整数以转换为在其他函数中使用。 PS:对不起,我的英语不好。 我希望11F为整数287。
1回复

无法正确将十六进制转换为十进制

我在理解十六进制字节时遇到麻烦。 当手册中以十六进制表示的Header ID为7Fh时,则表示0111 1111对吗? 根据在线十六进制十进制转换器,它将转换为十进制127。 我看到的输出是 我在这里做错了什么?
3回复

Arduino十六进制到十进制转换

我需要将十六进制字符串转换为十进制值。 我使用了以下方法。 但是有时它返回错误的十进制值。 十六进制字符串的格式为“ 00 00 0C 6E”