Convertir entier de (pure) binaire BCD

Je suis stupide maintenant de résoudre ce problème...

- Je obtenir un numéro de BCD (chaque chiffre est un 4 bits de la représentation)

Par exemple, ce que je veux:

  • D'entrée: 202 (hex) == 514 (dec)
  • De sortie: BCD 0x415

  • D'entrée: 0x202

  • De bits de la représentation: 0010 0000 0010 = 514

Ce que j'ai essayé:

unsigned int uiValue = 0x202;
unsigned int uiResult = 0;
unsigned int uiMultiplier = 1;
unsigned int uiDigit = 0;


//get the dec bcd value
while ( uiValue > 0 )
{
    uiDigit= uiValue & 0x0F;
    uiValue >>= 4;
    uiResult += uiMultiplier * uiDigit;
    uiMultiplier *= 10;
}

Mais je sais que c'est très mal ce serait 202 en représentation binaire et ensuite divisé en 5 unités et représenté comme un nombre décimal à nouveau

Je peux résoudre le problème sur le papier, mais j'ai juste ne peux pas obtenir à un simple Code C

  • Puis-je suggérer que, lorsque vous traitez avec des octets et des amuse-gueules, hex masques sont plus faciles à mettre en contexte? par exemple 0x0F est plus évident que le 15 (au moins pour moi!)
  • J'ai ajouté un peu plus d'informations
  • c'est tellement vrai, va changer cela. thx
  • Votre code semble bien pour moi. décimal 202 est binaire 1100 1010, ou, divisé en amuse-gueules: décimal 6 4, et par conséquent la BCD représentation décimale 64.
  • 202 hex = 514 dec = 514 BCD 🙂
  • Mais il a dit uiValue = 202, pas 0x202.... Et si c'était 0x202, puis la BCD valeur décimale 202...
  • c'est vrai, j'en suis venu à ce point dans ma tryings
  • D'où ma réponse ci-dessous...
  • Je dois être en train de devenir fou, parce que je pensais que l'idée était dans le nom: DÉCIMALE Codée Binaire non BChex 🙂
  • Sagi - pouvez-vous préciser: Êtes-vous désireux de convertir BCD pour Uint (question du titre), ou Uint BCD (code)
  • il y a des discussions en cours dans les commentaires de ma réponse si vous voulez vraiment une BCD comme votre sortie (comme votre question unis) ou int (comme votre question le titre ne et également la première révision de votre question). Veuillez fournir représentation binaire de résultat correct que vous voulez pour l'entrée 0010 0000 0010

InformationsquelleAutor Sagi | 2012-11-06