Linux C 十進制和BCD碼互轉

最近要設置個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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章