BCD码(Binary-Coded Decimal),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免去使计算机作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。
代码实现:
#include <stdio.h>
#include <stdlib.h>
typedef unsigned char uint8;
typedef unsigned int uint32;
typedef unsigned short WORD;
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
uint8 HEX2BCD(unsinged char hex_data)
{
uint8 bcd_data;
uint8 temp;
if (hex_data <= 99)
{
temp = hex_data % 10;
bcd_data = hex_data / 10 << 4;
bcd_data = bcd_data | temp;
}
else
{
bcd_data = 0xFF;
}
return bcd_data;
}
int main() {
SYSTEMTIME gCurrTime;
gCurrTime.wYear = 2024;
gCurrTime.wMonth = 12;
gCurrTime.wDay = 4;
gCurrTime.wHour = 9;
gCurrTime.wMinute = 30;
gCurrTime.wSecond = 59;
printf("BCD: %x %x %x %x %x %x",HEX2BCD((gCurrTime.wYear)/100 ),HEX2BCD((gCurrTime.wYear)%100),HEX2BCD(gCurrTime.wMonth),HEX2BCD(gCurrTime.wDay) ,HEX2BCD(gCurrTime.wHour) ,HEX2BCD(gCurrTime.wMinute) );
return 0;
}
实测效果: