十進制與BCD碼轉換的算法詳解
手頭上在做的項目需要用到ds1302實時時鐘,ds1302讀出來的數據是BCD碼,需要轉換,寫入也是。
BCD碼
BCD是指用二進制來表示十進制數的編碼,即用4位二進制來表示一位十進制數,因此4位二進制數表示最大的十進制數9(1001),隻取十六個數中的十個數。
比如:
BCD碼:0x99(153),該BCD碼轉換成十進制是99.
算法原理
十進制是逢十進一,而十六進制是逢十六進一,它們之間的每次進位差 6 6 ,所以一個十進制數要轉換成BCD碼,要先算清多進位的位數,比如,十進制99″ role=”presentation”>99進位瞭 99/10=9 99 / 10 = 9 次,每次進位和十六進制進位相比差 6 6 ,所以一共差瞭9×6=54″ role=”presentation”>9×6=54,即 99+54=153 99 + 54 = 153 (BCD)。BCD碼轉化成十進制碼也一樣。
代碼
static uint8_t BCD2DEC(uint8_t bcd) { return (bcd-(bcd>>4)*6); } static uint8_t DEC2BCD(uint8_t dec) { return (dec+(dec/10)*6); }
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Java 將PPT幻燈片轉為HTML文件的實現思路
- Postgres 創建Role並賦予權限的操作
- Java實現將html字符串插入到PPT幻燈片
- Vue如何根據id在數組中取出數據
- Go語言基礎類型及常量用法示例詳解