Algoritmo per la conversione di base in C?

0

Ho inserito questo codice che fa quello che dovrebbe fare, ma forse c'è un approccio migliore o più generale? Sto convertendo un numero di base 10 a 4 cifre, ad es. "11" alla base 16, ad es. "17" (che viene scritto sul display come 11 quando chiamato con 17 perché la funzione accetta bit come argomento).

    int hex1 = perhapsprime / 1000;
    int hex2 = (perhapsprime - hex1*1000) / 100;
    int hex3 = (perhapsprime - hex2*100 -hex1*1000) / 10;
    int hex4 = perhapsprime - hex3*10 - hex2*100 - hex1*1000;
    int test = 16*16*16*hex1+16*16*hex2+16*hex3+hex4;

Il numero intero "test" avrà il valore corretto dopo l'esecuzione di questo codice, ma esiste un modo più efficiente per farlo?

Aggiornamento

Ho optato per quanto segue che sembra essere in grado di convertire qualsiasi numero di cifre in BCD:

int tbcd(int v) {
    int total = 0;
    int resultbase = 1;
    while(v > 0) {
        total += resultbase * (v % 10);
        resultbase *= 16;
        v /= 10;
    }
    return total;
}
    
posta Niklas Rosencrantz 30.03.2014 - 08:05
fonte

1 risposta

3

Questa non è una conversione alla base 16. Questa è una conversione in BCD: decimale codificato in binario. Stai prendendo un (presunto) numero decimale di 4 cifre e inserendo ogni cifra decimale nella sua propria cifra esadecimale a 4 bit.

Questa è una cosa perfettamente legittima da fare, una volta che gli dai il nome giusto. Questo può anche aiutare: link .

Sì, ci sono molti modi più generali e meno soggetti a errori per convertire i numeri interi in BCD. Vedi link .

    
risposta data 30.03.2014 - 08:13
fonte

Leggi altre domande sui tag