Question

Quelqu'un peut-il me expliquer comment convertir BCD à Hexadécimal? Par exemple, comment puis-je convertir 98 (BCD) à hexadécimaux. Merci.

Était-ce utile?

La solution

Je ne comprends pas bien votre question, mais je devine que par exemple quelqu'un vous donne un numéro 98 codé en BCD, qui serait:

1001 1000

et vous êtes censé obtenir:

62H

Ce que je propose:

1) convertir la valeur codée BCD à valeur décimale (D)

2) converti D à la valeur hexadécimale.

Selon le langage de programmation que vous choisissez, cette tâche sera plus facile ou plus difficile.

EDIT: En Java, il pourrait être:

    byte bcd = (byte)0x98; // BCD value: 1001 1000

    int decimal = (bcd & 0xF) + (((int)bcd & 0xF0) >> 4)*10;

    System.out.println(
            Integer.toHexString(decimal)
    );

Autres conseils

BCD est un sous-ensemble de hexadécimal, donc il n'y a pas de conversion nécessaire - toute valeur BCD donné est identique à la valeur hexadécimale correspondant. Par exemple, « 98 » en BCD est 10011000, qui est le même que 98 en hexadécimal

Pour toute valeur codée BCD (qui est adaptée à un int).

itératifs:

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;
}

récursive:

unsigned int bcd2dec_r(unsigned int bcd)
{
    return bcd ? (bcd2dec_r(bcd>>4)*10) + (bcd & 0x0f) : 0; 
}

Je crée une table de 256 entrées, cartographie tous les octets BCD dans leur équivalent binaire; vous pouvez ensuite utiliser l'impression hexadécimale de votre langage de programmation.

Aller entre les différentes combinaisons de Hex, décimal et binaire. Si vous savez comment fonctionne binaires alors vous devriez facilement pouvoir utiliser 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

Une fois que vous avez cette partie vers le bas, vous devriez pouvoir utiliser diviser par 10 ou 10% pour trouver une combinaison pour générer votre BCD. Comme il utilise seulement 10 combinaisons au lieu de tous les 16, vous perdrez quelques informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top