C - 将十进制数转换为压缩BCD

jpe*_*pen 0 c

如何在不使用sprintf的情况下在C中实现这些转换?

20 => 0x20
12 => 0x12
Run Code Online (Sandbox Code Playgroud)

目前我有:

int year = 12;
int month = 10;
int day = 9;
unsigned char date[3];

date[0] = year & 0xFF;
date[1] = month & 0xFF;
date[2] = day & 0xFF;
Run Code Online (Sandbox Code Playgroud)

date将包含{0x0C,0x0A,0x09},但我希望它为{0x12,0x10,0x09}

Hol*_*dad 6

您只需要检索十进制基数中的每个数字,并将其乘以十六进制的等效数字.

#include <stdio.h>

int hex(int v){
int total = 0;
int resultbase = 1;
while(v > 0 ){
    total += resultbase * (v % 10);
    resultbase *= 16;
    v /= 10;
}

return total;
}

 int  main(){
printf ("12 => %x, 20 => %x\n", hex(12), hex(20));
return 0;
Run Code Online (Sandbox Code Playgroud)

}


Ste*_*sop 5

对于您使用的有限2位数范围:

assert(year >= 0 && year < 100);
date[0] = (year / 10) * 16 + (year % 10);
Run Code Online (Sandbox Code Playgroud)

等等

你可以表达它,((year / 10) << 4) | (year % 10)好像这对你更有意义.