[C++] Da esadecimale a decimale

di il
8 risposte

[C++] Da esadecimale a decimale

Stavo facendo questo programma, ma al momento dell'avvio, e al momento del risulatato, esso è parecchio diverso da quello che dovrebbe essere.
Es: A=66.
Non posso usare vettori e simili.


Perché?
//Da Esadecimale a decimale
#include <iostream>
#include <cmath>
#include <string>
using namespace std;

int main() {
    ///Dichiarazione variabili
    string nhex; ///numero esadecimale
    int decimale = 0; ///output decimale
    int i; ///variabile ciclo
    int A=10,B=11,C=12,D=13,E=14,F=15; ///lettere per esadecimale
    cout <<"Numero esadecimale: ";
    cin >> nhex;
    ///Lunghezza numero (da quanti bit è composto)
    int l = nhex.size();
    ///Inizio ciclo
    for (i = 0; i < l; i++){
        decimale += nhex[i] * (pow(16,l-1-i));
        }

    ///Output
    cout << "Decimale: " << decimale << endl;

    return 0;

}

8 Risposte

  • Re: [C++] Da esadecimale a decimale

    Quelle variabili, da A a F non ti servono. Prevedi una variabile v e imposta il ciclo in questo modo
    
        int v;
        for (i = 0; i < l; i++)
        {
          if(nhex[i]>='A' && nhex[i]<='F')
    	     v = 10 + nhex[i] - 'a';
          else
    	     v = nhex[i] - '0';
    
          decimale += v * (pow(16,l-1-i));
        }
    
  • Re: [C++] Da esadecimale a decimale

    oregon ha scritto:


    Quelle variabili, da A a F non ti servono. Prevedi una variabile v e imposta il ciclo in questo modo
    
        int v;
        for (i = 0; i < l; i++)
        {
          if(nhex[i]>='A' && nhex[i]<='F')
    	     v = 10 + nhex[i] - 'a';
          else
    	     v = nhex[i] - '0';
    
          decimale += v * (pow(16,l-1-i));
        }
    
    Ho provato, ma non viene lo stesso.
    E in più 'a' e '0', cosa sarebbero?
    if(nhex[i]>='A' && nhex[i]<='F')
    'A' e 'F' sono 10 e 15, giusto?
  • Re: [C++] Da esadecimale a decimale

    La riga corretta è

    v = 10 + nhex - 'A';


    Adesso dovrebbe andare ...
  • Re: [C++] Da esadecimale a decimale

    oregon ha scritto:


    La riga corretta è

    v = 10 + nhex - 'A';


    Adesso dovrebbe andare ...


    Va, grazie. Puoi spiegarmi come hai fatto?
  • Re: [C++] Da esadecimale a decimale

    Nella variabile v devi ottenere il valore decimale del carattere (da 0 a 15)

    Usi il valore ASCII delle lettere e delle cifre a seconda del singolo carattere che esamini
  • Re: [C++] Da esadecimale a decimale

    oregon ha scritto:


    Nella variabile v devi ottenere il valore decimale del carattere (da 0 a 15)

    Usi il valore ASCII delle lettere e delle cifre a seconda del singolo carattere che esamini
    Non ho ben chiare queste righe:
    if(nhex[i]>='A' && nhex[i]<='F')
            v = 10 + nhex[i] - 'a';
          else
            v = nhex[i] - '0';
    Se nhex con indice i è maggiore o uguale ad A (come sa che A è dieci?) e minore o uguale a F (come sa che è 15?)
    V (che vale 0, giusto?) è uguale a 10 + (nhex sarebbe 0?) - 'A' (quindi -10?)
    altrimenti
    v (sempre 0) è uguale a nhex (0?) - 0?
  • Re: [C++] Da esadecimale a decimale

    FDG2801 ha scritto:


    Se nhex con indice i è maggiore o uguale ad A (come sa che A è dieci?) e minore o uguale a F (come sa che è 15?)
    La if controlla se il carattere corrente è compreso tra A e F. Solo questo.
    V (che vale 0, giusto?)
    No, v non vale 0 e non ha importanza ...
    è uguale a 10 + (nhex sarebbe 0?) - 'A' (quindi -10?)


    No ... in questo caso, dato che il carattere è compreso tra A ed F, viene calcolato il valore ASCII (sai cosa è?) del carattere in questione a cui viene sommato 10 e sottratto il valore ASCII del carattere 'A'

    altrimenti
    v (sempre 0) è uguale a nhex (0?) - 0?


    Altrimenti v diventa eguale al valore ASCII del carattere meno il valore ASCII del carattere '0'

    La questione che ti fa capire queste semplicissime righe è se hai chiaro o no il codice ASCII e come funziona (e mi sa di no ...).
  • Re: [C++] Da esadecimale a decimale

    oregon ha scritto:


    FDG2801 ha scritto:


    Se nhex con indice i è maggiore o uguale ad A (come sa che A è dieci?) e minore o uguale a F (come sa che è 15?)
    La if controlla se il carattere corrente è compreso tra A e F. Solo questo.
    V (che vale 0, giusto?)
    No, v non vale 0 e non ha importanza ...
    è uguale a 10 + (nhex sarebbe 0?) - 'A' (quindi -10?)


    No ... in questo caso, dato che il carattere è compreso tra A ed F, viene calcolato il valore ASCII (sai cosa è?) del carattere in questione a cui viene sommato 10 e sottratto il valore ASCII del carattere 'A'

    altrimenti
    v (sempre 0) è uguale a nhex (0?) - 0?


    Altrimenti v diventa eguale al valore ASCII del carattere meno il valore ASCII del carattere '0'

    La questione che ti fa capire queste semplicissime righe è se hai chiaro o no il codice ASCII e come funziona (e mi sa di no ...).


    So cos'è l'ASCII, ma non lo abbiamo usato così in C++, in genere, o comunque non così
Devi accedere o registrarti per scrivere nel forum
8 risposte