Binary decimali codificati (BCD) alla conversione esadecimale
Domanda
Può qualcuno mi spieghi come convertire BCD per esadecimale? Per esempio come posso convertire 98 (BCD) a esadecimale. Grazie.
Soluzione
Non capisco la tua domanda, ma credo che per esempio qualcuno ti dà un numero di 98 codificato in BCD, che sarebbe:
1001 1000
e si suppone di ottenere:
62H
Quello che vorrei proporre:
1) convertire il valore BCD codificato al valore decimale (D)
2) convertire D al valore esadecimale.
A seconda del linguaggio di programmazione scelto, questo compito sarà più facile o più difficile.
EDIT: In Java potrebbe essere:
byte bcd = (byte)0x98; // BCD value: 1001 1000
int decimal = (bcd & 0xF) + (((int)bcd & 0xF0) >> 4)*10;
System.out.println(
Integer.toHexString(decimal)
);
Altri suggerimenti
BCD è un sottoinsieme di esadecimale, quindi non c'è conversione necessaria - ogni valore dato BCD è identico al valore esadecimale corrispondente. Ad esempio, '98' in BCD è 10011000, che è la stessa come 98 in esadecimale
Per ogni valore codificato BCD (che si inserisce in un int).
iterativo:
unsigned int bcd2dec(unsigned int bcd)
{
unsigned int dec=0;
unsigned int mult;
for (mult=1; bcd; bcd=bcd>>4,mult*=10)
{
dec += (bcd & 0x0f) * mult;
}
return dec;
}
ricorsivo:
unsigned int bcd2dec_r(unsigned int bcd)
{
return bcd ? (bcd2dec_r(bcd>>4)*10) + (bcd & 0x0f) : 0;
}
mi piacerebbe creare una tabella di 256 voci, mappando tutti i byte BCD nel loro equivalente binario; è quindi possibile utilizzare la stampa esadecimale del linguaggio di programmazione.
Vai tra le diverse combinazioni di Hex, decimale e binario. Se sai come funziona binari allora si dovrebbe facilmente essere in grado di utilizzare BCD:
Hex Dec BCD
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
A 10 0001 0000 <-- notice that each digit looks like hex except it can only go to 9.
B 11 0001 0001
C 12 0001 0010
D 13 0001 0011
E 14 0001 0100
F 15 0001 0101
Una volta che hai questa parte di esso verso il basso, si dovrebbe essere in grado di utilizzare dividere per 10 o 10% per trovare combinazioni per generare il GAV. Dal momento che utilizza solo 10 combinazioni invece di tutti i 16 si perderanno alcune informazioni.