最近要設置個RTC,涉及到BCD碼的轉換,這裏記錄一下。
1、宏定義
#define BCD_TO_DEC(x) ((x >> 4) * 10 + (x & 0x0F)) /* BCD碼轉十進制 */
#define DEC_TO_BCD(x) (((x / 10) << 4) + (x % 10)) /* 十進制轉BCD碼 */
2、測試代碼
#include <stdio.h>
#define BCD_TO_DEC(x) ((x >> 4) * 10 + (x & 0x0F)) /* BCD碼轉十進制 */
#define DEC_TO_BCD(x) (((x / 10) << 4) + (x % 10)) /* 十進制轉BCD碼 */
int main(int argc, char **argv)
{
int i;
int dec1, dec2;
char bcd;
dec1 = 15;
bcd = DEC_TO_BCD(dec1);
printf("dec1 = %d, dec = 0x%x\n", dec1, bcd);
dec2 = BCD_TO_DEC(bcd);
printf("dec2 = %d, bcd = 0x%x\n", dec2, bcd);
return 0;
}
3、測試結果
hrx@hrx-pc:~/Linux_C_Demo$ ./BCD
dec1 = 15, dec = 0x15
dec2 = 15, bcd = 0x15