Convertir entero de binario (puro) a BCD

Soy demasiado estúpido ahora para resolver este problema ...

Obtengo un número BCD (cada dígito es una representación propia de 4 bits)

Por ejemplo, lo que quiero:

Entrada: 202 (hexadecimal) == 514 (dec)

Salida: BCD 0x415

Entrada: 0x202

Representación de bits: 0010 0000 0010 = 514

¿Qué he intentado?

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

Pero sé que está muy mal, esto sería 202 en representación de bits y luego se dividiría en 5 nibbles y luego se representaría como un número decimal nuevamente.

Puedo resolver el problema en papel, pero no lo consigo en un simple C-Code

Respuestas a la pregunta(5)

Su respuesta a la pregunta