将整数从(纯)二进制转换为BCD

Sag*_*agi 1 c binary bcd

我现在愚蠢地解决这个问题......

我得到一个BCD号码(每个数字都是一个自己的4Bit表示)

例如,我想要的:

  • 输入:202(十六进制)== 514(十进制)
  • 输出:BCD 0x415

  • 输入:0x202

  • 位表示:0010 0000 0010 = 514

我试过了什么:

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;
}
Run Code Online (Sandbox Code Playgroud)

但我知道这是错误的,这将是位表示202,然后分成5个半字节,然后再次表示为十进制数

我可以在纸上解决问题,但我不能用一个简单的C代码来解决它

Dan*_*ger 9

你得到了错误的方法.您的代码正在从BCD转换为二进制,正如您的问题(原始)标题所示.但是,只有从二进制转换为BCD时,您提供的输入和输出值才是正确的.在这种情况下,请尝试:

#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;
}
Run Code Online (Sandbox Code Playgroud)

证明:http://ideone.com/R0reQh