Décoder décimale codée binaire (BCD) à l'entier non signé
La valeur utilisée dans mon projet est exprimé avec 4 bits codés en binaire décimales (BCD), qui a été initialement stockées dans un tampon de caractères (par exemple, pointé par un pointeur const unsigned char *
). Je veux convertir l'entrée BCD char flux vers un entier. Veuillez s'il vous plaît me montrer une manière efficace et rapide façon de le faire?
Format de données exemple et résultat attendu:
BCD*2; 1001 0111 0110 0101=9765
"9" "7" "6" "5"
Merci beaucoup!
- double possible de le moyen le Plus efficace pour convertir BCD binaire
- Persson: Que les postes en C#, pas du C++
- Pour le principe général de la façon de faire, une solution C# est aussi bonne que les autres. Cependant, je pense que ma solution est probablement plus compact que l'un de ceux dans ce thread. 🙂
Vous devez vous connecter pour publier un commentaire.
length
ici spécifie le nombre d'octets dans l'entrée, donc, pour l'exemple donné par l'OP,nybbles
serait{0x97, 0x65}
etlength
serait de 2.Vous pouvez déchiffrer le bouton droit de la plupart des chiffres comme suit:
ensuite, vous pouvez déplacer le numéro de la droite, de sorte que le chiffre suivant devient le plus à droite:
Cela vous donnera les chiffres dans le bon ordre, bien que (de droite à gauche). Si vous savez combien de chiffres que vous avez, bien sûr, vous pouvez extraire la bonne bits directement.
Utiliser, par exemple,
(bcdNumber >> (4 * digitIndex)) & 0xf;
pour extraire ledigitIndex
:th chiffres, où le chiffre 0 est le plus à droite.