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
, pas0x202...
. 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
Vous devez vous connecter pour publier un commentaire.
Vous avez obtenu le mauvais sens. Votre code est la conversion de BCD binaire, tout comme votre question (d'origine) titre l'indique. Mais l'entrée et la sortie des valeurs fournies sont correctes que si vous convertissez de binaire BCD. Dans ce cas, essayez de:
Preuve: http://ideone.com/R0reQh
Essayez les solutions suivantes.
Aussi on peut essayer la variante suivante (bien que peut-être peu inefficace)
11
à17
ou de la même manière. (Mon projet est de code C pour les 7 segments à LEDs de la Altera DE2 FPGA.)Le vrai problème ici, c'est la confusion des bases et des unités
L'202 devrait être HEX, ce qui équivaut à 514 décimales... et donc la BCD calcs sont corrects
Code binaire décimal permettra de convertir du décimal (514) en trois grignoter de la taille des champs:
- 5 = 0101
- 1 = 0001
- 4 = 0100
Le plus gros problème est que vous avez le titre à l'envers, et de la conversion de Uint en BCD, tandis que le titre demandé BCD pour Unint
uiValue = 202
est faux, bien que le texte dit qu'il devrait être hex:Input: 202 (hex)
Si l'entrée est 0x202 comme le dit le texte, la représentation binaire de l'entrée est 0000 0010 0000 0010, qui nous peut se convertir facilement en bcd.Un naïfs, mais la solution la plus simple:
C'est la solution que j'ai développé et fonctionne très bien pour les systèmes embarqués, comme les microcontrôleurs PIC de Microchip: