Convert integer from (pure) binary to BCD

bcd, binary, c

Solution

You got it the wrong way round. Your code is converting from BCD to binary, just as your question's (original) title says. But the input and output values you provided are correct only if you convert from binary to BCD. In that case, try:

#include <stdio.h>

int main(void) {

   int binaryInput = 0x202; 
   int bcdResult = 0;
   int shift = 0;

   printf("Binary: 0x%x (dec: %d)\n", binaryInput , binaryInput );

   while (binaryInput > 0) {
      bcdResult |= (binaryInput % 10) << (shift++ << 2);
      binaryInput /= 10;
   }

   printf("BCD: 0x%x (dec: %d)\n", bcdResult , bcdResult );
   return 0;
}

Proof: http://ideone.com/R0reQh

Problem

I'm to stupid right now to solve this problem... I get a BCD number (every digit is an own 4Bit representation) For example, what I want: - Input: 202 (hex) == 514 (dec) Output: BCD 0x415 Input: 0x202 - Bit-representation: 0010 0000 0010 = 514 What have I tried: ``` 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; } ``` But I know that's very wrong this would be 202 in Bit representation and then split into 5 nibbles and then represented as decimal number again I can solve the problem on paper but I just cant get it in a simple C-Code

Original source