十進制與BCD碼轉(zhuǎn)換的算法詳解
手頭上在做的項目需要用到ds1302實時時鐘,ds1302讀出來的數(shù)據(jù)是BCD碼,需要轉(zhuǎn)換,寫入也是。
BCD碼
BCD是指用二進制來表示十進制數(shù)的編碼,即用4位二進制來表示一位十進制數(shù),因此4位二進制數(shù)表示最大的十進制數(shù)9(1001),只取十六個數(shù)中的十個數(shù)。
比如:
BCD碼:0x99(153),該BCD碼轉(zhuǎn)換成十進制是99.
算法原理
十進制是逢十進一,而十六進制是逢十六進一,它們之間的每次進位差 6 6 ,所以一個十進制數(shù)要轉(zhuǎn)換成BCD碼,要先算清多進位的位數(shù),比如,十進制
代碼
static uint8_t BCD2DEC(uint8_t bcd) { return (bcd-(bcd>>4)*6); } static uint8_t DEC2BCD(uint8_t dec) { return (dec+(dec/10)*6); }
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C語言中操作sqlserver數(shù)據(jù)庫案例教程
這篇文章主要介紹了C語言中操作sqlserver數(shù)據(jù)庫案例教程,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07C++精要分析右值引用與完美轉(zhuǎn)發(fā)的應(yīng)用
C++11標準為C++引入右值引用語法的同時,還解決了一個短板,即使用簡單的方式即可在函數(shù)模板中實現(xiàn)參數(shù)的完美轉(zhuǎn)發(fā)。那么,什么是完美轉(zhuǎn)發(fā)?它為什么是C++98/03 標準存在的一個短板?C++11標準又是如何為C++彌補這一短板的?別急,本節(jié)將就這些問題給讀者做一一講解2022-05-05