十進(jìn)制與BCD碼轉(zhuǎn)換的算法詳解
手頭上在做的項目需要用到ds1302實時時鐘,ds1302讀出來的數(shù)據(jù)是BCD碼,需要轉(zhuǎn)換,寫入也是。
BCD碼
BCD是指用二進(jìn)制來表示十進(jìn)制數(shù)的編碼,即用4位二進(jìn)制來表示一位十進(jìn)制數(shù),因此4位二進(jìn)制數(shù)表示最大的十進(jìn)制數(shù)9(1001),只取十六個數(shù)中的十個數(shù)。
比如:
BCD碼:0x99(153),該BCD碼轉(zhuǎn)換成十進(jìn)制是99.
算法原理
十進(jìn)制是逢十進(jìn)一,而十六進(jìn)制是逢十六進(jìn)一,它們之間的每次進(jìn)位差 6 6 ,所以一個十進(jìn)制數(shù)要轉(zhuǎn)換成BCD碼,要先算清多進(jìn)位的位數(shù),比如,十進(jìn)制
代碼
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語言學(xué)生成績管理系統(tǒng)課程設(shè)計
這篇文章主要為大家詳細(xì)介紹了C語言學(xué)生成績管理系統(tǒng)課程設(shè)計,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
C語言中操作sqlserver數(shù)據(jù)庫案例教程
這篇文章主要介紹了C語言中操作sqlserver數(shù)據(jù)庫案例教程,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++精要分析右值引用與完美轉(zhuǎn)發(fā)的應(yīng)用
C++11標(biāo)準(zhǔn)為C++引入右值引用語法的同時,還解決了一個短板,即使用簡單的方式即可在函數(shù)模板中實現(xiàn)參數(shù)的完美轉(zhuǎn)發(fā)。那么,什么是完美轉(zhuǎn)發(fā)?它為什么是C++98/03 標(biāo)準(zhǔn)存在的一個短板?C++11標(biāo)準(zhǔn)又是如何為C++彌補(bǔ)這一短板的?別急,本節(jié)將就這些問題給讀者做一一講解2022-05-05

