Base 16 Base per 10 in C

G

GrandAlf

Guest
Mi sento piuttosto sciocco, ma non sembra che la mia testa rotonda questo.Sto cercando di convertire i 16 numeri di base (lettere AF non utilizzati) a 10 come base per il seguito.

B16 0x47 = 71 dicembre.B16 0x16 = 22 dicembre.B16 0x30 = 48 dicembre.B16 0x01 = 1 dicembre Etc

Chiunque ha una routine per fare questo?.Come ho già detto che nessuna delle B16 contenere qualsiasi numero di caratteri esadecimali, tutti i numeri sono standard.Sembra così ovvio, ma io sono solo uno cieco qui.Posso ovviamente visualizzazione in qualsiasi formato utilizzando printf, ma non è questo che mi dopo.Qualsiasi consulenza più ricevuto con gratitudine.

 
La questione non è chiara a tutti.Esadecimale o decimale sono stampabili solo rappresentazioni interne di formati di dati, che sono sempre binario.Per ottenere una rappresentazione decimale in una stringa, sprintf () o itoa () C-funzioni possono essere utilizzate.Se si intende una diversa rappresentazione di una stringa di stampa o in formato binario interno, si dovrebbe specificare che.

Ci sono naturalmente i formati come BCD, che rappresentano un numero di due cifre decimali in 8 bit, ma non c'è nulla nel tuo post che essa suggerisce.

Basta dire, che cosa si desidera realizzare!

 
ricordare
Lingua C in grado di capire il numero in tutte le cioè formato esadecimale, decimale, binario, ottale.basta dichiarare, ma tutti i media stessi
per esempio
a = 0x04; Hex 4
a = 4; decimale 4
a = 04; ottale 4
a = 0b100; binario 4

 
Forse non ho me spiegare correttamente.Sto cercando di prendere un numero variabile (senza stringhe) che contiene un numero binario rappresentazione di un numero esadecimale, e convertire questo ad un altro numero binario che rappresenta un numero decimale.Tali dati numerici sono sempre, AF non è mai utilizzata.

ad esempio,
Hex 0-9 sarebbe la stessa in corso di 0-9 decimali.N. conversione.

Se l'ingresso è di 30 hex decimale dovrebbe uscire come 48.Stesso con altri esempi nel post iniziale.

Non posso ovviamente fare una tabella di conversione, ma una formula sarebbe una migliore opzione.Effectivly a Decimale Esadecimale senza le lettere.Speriamo che questo ha un senso.

 
GrandAlf,
è questo il genere di cose come il tuo alla ricerca di
un'idea generale
Codice:int HexToDec (int nNumToConvert) / / ricorsiva fn

(

int nConverted = 0; / / Cancella questo per il calcolo

int nQuotient;

int nRemainder;nQuotient = (nNumToConvert / 16);

nRemainder = (nNumToConvert% 16);/ / Potrebbe utilizzare operatore ternario '?'
ma questo 'se ... else' è più chiara.

if (nQuotient = 0)

(

nConverted = nRemainder;

)

altro

(

nConverted = (16 * HexToDec (nQuotient) nRemainder);

)

return (nConverted);

)

 
Questo appare nella giusta direzione, avrà un gioco un po '.Molte grazie per il vostro input.

 
Citazione:

Se l'ingresso è di 30 hex decimale dovrebbe uscire come 48.
Stesso con altri esempi nel post iniziale.
 
Basta non superare un numero di 5 cifre esadecimali ad esso, o modificare le variabili a lungo.

DOH!questa risposta può essere un altro, ho appena eseguito sotto LCC ..

Codice:/ * Converte stringa di input in formato esadecimale per il suo Decimali

si accettano qualsiasi omologazione valida di stringa esadecimale * /int main ()

(

int a;while (1)

(

printf ( "Inserire un numero esadecimale:");

scanf ( "% x", & a); / / stringa di input in formato esadecimale

printf ( "è la stessa Decimali% d \ n \ n", a); / / dicembre formato di uscita

)

return 0;

)

 
Era da un frammento di codice che ho raccolto.Guardando ancora, naturalmente, è BCD.Non posso credere che ho perso.Solo alcuni giorni non ho il mio cervello in marcia.Molte grazie ad entrambi per aver scelto di mettere me sulla strada giusta.

 
Basta rileggere la mia dichiarazione, io non chiedo causato confusione.Naturalmente 0x30 è la stessa di 48
ecc Quello che mi è stato effettivamente cercando di raggiungere è stato cambiare il numero esadecimale a decimale, ma mantenendo lo stesso valore.Così come l'esempio 0x47 (01000111) sarebbe effettivamente diventare dic 47 (00101111).È un dato di fatto il contrario di quanto segue.

/ / Convert BCD 1 byte a 1 byte HEX
//-------------------------------
unsigned char BCD2HEX (unsigned int BCD)
(
unsigned char temp;
temp = ((bcd>>

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Fresco" border="0" />

* 100) | ((bcd>> 4) * 10) | (bcd & 0x0F);
return temp;
)

Cercando di fare di Hex BCD invece, e non sempre abbastanza bene.Siamo spiacenti, ieri è stato solo uno di questi giorni frenetici, non pensare logicamente a tutti.Aggiunto dopo 2 minuti:La faccina sorridente dovrebbe essere un 8!

 

Welcome to EDABoard.com

Sponsor

Back
Top