首页 > 解决方案 > 如何在 C++ 中递归地将十六进制转换为十进制?

问题描述

*注意:这里有一个类似的问题,但它对我没有帮助,因为我的朋友直接将它复制粘贴到她的代码上,我不想这样做(加上它对我个人来说毫无意义,所以如果我不遵循用于它的方法,为什么我会首先参考它)。我本质上需要一些关于 LOGIC 的帮助,甚至不完全是逐行写出的代码。

我已经有一个将我的 char 转换为十进制的函数:

    void CharToDec(char hexVal)

   { 
     if(hexVal >= '0' && hexVal <= '9')

       hexVal = hexVal - '0';

     else

    {

      hexVal = hexVal - 'A' + 10;

    } 

   }

不确定这些台词是否正确,但这是我从教授那里得到的。我需要使用递归从十六进制进行十进制转换。没有例外。谁能给我一个伪代码或假人逻辑流?我不聪明,也根本不懂递归。教授略读了一下,真诚地听起来对帮助我们处理这个问题一点兴趣都没有。另外,我们没有教科书。而且由于整个学校因大流行而关闭,我很难与他联系。

我的基本开关代码必须是一个不同的递归函数。我使用这段代码只是为了将字符转换为十六进制链中的小数。

示例输出:

输入十六进制值:7F

十进制值:127

像这样。

谢谢你。

标签: c++recursion

解决方案


请看下面的代码。只添加了一个最小版本。您可以根据您的要求自定义此代码

#include <iostream>

#include <string.h>

using namespace std;

void CharToDec(char hexVal[]) {
  int len = strlen(hexVal);

  // Initializing base value to 1, i.e 16^0 
  int base = 1;

  int dec_val = 0;

  // Extracting characters as digits from last character 
  for (int i = len - 1; i >= 0; i--) {
    // if character lies in '0'-'9', converting  
    // it to integral 0-9 by subtracting 48 from 
    // ASCII value. 
    if (hexVal[i] >= '0' && hexVal[i] <= '9') {
      dec_val += (hexVal[i] - 48) * base;

      // incrementing base by power 
      base = base * 16;
    }

    // if character lies in 'A'-'F' , converting  
    // it to integral 10 - 15 by subtracting 55  
    // from ASCII value 
    else if (hexVal[i] >= 'A' && hexVal[i] <= 'F') {
      dec_val += (hexVal[i] - 55) * base;
      // incrementing base by power 
      base = base * 16;
    }
  }
  cout << "Decimal value=" << dec_val << endl;
}

int main() {
  CharToDec("7F");
  return 0;
}

输出将是

Decimal value=127

推荐阅读