Как преобразовать из шестнадцатеричного в десятичный в C ++ рекурсивно? - PullRequest
0 голосов
/ 24 марта 2020

* ПРИМЕЧАНИЕ: здесь есть похожий вопрос, но он мне не помог, потому что моя подруга скопировала его в свой код, и я не хочу этого делать (плюс, это было бессмысленно лично мне, так зачем мне ссылаться на это в первую очередь, если я не следую методу, который использовался для этого). По сути, мне нужна помощь с LOGI C, даже не код, написанный построчно.

У меня уже есть функция для десятичного знака:

    void CharToDec(char hexVal)

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

       hexVal = hexVal - '0';

     else

    {

      hexVal = hexVal - 'A' + 10;

    } 

   }

Не уверен, что эти строки правильные, но это то, что я получил от своего профессора. Мне нужно получить десятичное преобразование из шестнадцатеричного с использованием рекурсии. Не исключение Может ли кто-нибудь дать мне псевдокод, которым я следую, или поток logi c для чайников? Я не умный и не понимаю рекурсии вообще. Профессор вздрогнул и искренне не заинтересовался, чтобы помочь нам справиться с этим. Плюс у нас нет учебника. И так как вся школа закрыта из-за пандемии c, мне очень трудно связаться с ним.

Мой базовый код переключения должен быть другой рекурсивной функцией. Я использую этот блок кода только для преобразования символов в десятичные числа в шестнадцатеричной цепочке.

Пример вывода:

Введите шестнадцатеричное значение: 7F

Десятичное значение: 127

Примерно так.

Спасибо.

1 Ответ

0 голосов
/ 24 марта 2020

Пожалуйста, смотрите код ниже. Добавлена ​​только минимальная версия. Вы можете настроить этот код в соответствии с вашими требованиями

#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
...