十進(jìn)制與BCD碼轉(zhuǎn)換的算法詳解
手頭上在做的項(xiàng)目需要用到ds1302實(shí)時(shí)時(shí)鐘,ds1302讀出來(lái)的數(shù)據(jù)是BCD碼,需要轉(zhuǎn)換,寫(xiě)入也是。
BCD碼
BCD是指用二進(jìn)制來(lái)表示十進(jìn)制數(shù)的編碼,即用4位二進(jìn)制來(lái)表示一位十進(jìn)制數(shù),因此4位二進(jìn)制數(shù)表示最大的十進(jìn)制數(shù)9(1001),只取十六個(gè)數(shù)中的十個(gè)數(shù)。
比如:
BCD碼:0x99(153),該BCD碼轉(zhuǎn)換成十進(jìn)制是99.
算法原理
十進(jìn)制是逢十進(jìn)一,而十六進(jìn)制是逢十六進(jìn)一,它們之間的每次進(jìn)位差 6 6 ,所以一個(gè)十進(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é)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- Java之實(shí)現(xiàn)十進(jìn)制與十六進(jìn)制轉(zhuǎn)換案例講解
- 一篇教程教你學(xué)會(huì)Python進(jìn)制轉(zhuǎn)換(十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制)
- C# 進(jìn)制轉(zhuǎn)換的實(shí)現(xiàn)(二進(jìn)制、十六進(jìn)制、十進(jìn)制互轉(zhuǎn))
- 淺談java二進(jìn)制、十進(jìn)制、十六進(jìn)制、字符串之間的相互轉(zhuǎn)換
- 科學(xué)知識(shí):二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制轉(zhuǎn)換
相關(guān)文章
C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01C語(yǔ)言中操作sqlserver數(shù)據(jù)庫(kù)案例教程
這篇文章主要介紹了C語(yǔ)言中操作sqlserver數(shù)據(jù)庫(kù)案例教程,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++ TensorflowLite模型驗(yàn)證的過(guò)程詳解
這篇文章給大家介紹了C++ TensorflowLite模型驗(yàn)證的過(guò)程,測(cè)試代碼,主要是RunInference()和read_file(),詳細(xì)操作過(guò)程跟隨小編一起看看吧2021-08-08C語(yǔ)言volatile關(guān)鍵字的作用與示例
這篇文章主要介紹了C語(yǔ)言volatile關(guān)鍵字的作用,volatile提醒編譯器它后面所定義的變量隨時(shí)都有可能改變,因此編譯后的程序每次需要存儲(chǔ)或讀取這個(gè)變量的時(shí)候,都會(huì)直接從變量地址中讀取數(shù)據(jù)2023-04-04C++精要分析右值引用與完美轉(zhuǎn)發(fā)的應(yīng)用
C++11標(biāo)準(zhǔn)為C++引入右值引用語(yǔ)法的同時(shí),還解決了一個(gè)短板,即使用簡(jiǎn)單的方式即可在函數(shù)模板中實(shí)現(xiàn)參數(shù)的完美轉(zhuǎn)發(fā)。那么,什么是完美轉(zhuǎn)發(fā)?它為什么是C++98/03 標(biāo)準(zhǔn)存在的一個(gè)短板?C++11標(biāo)準(zhǔn)又是如何為C++彌補(bǔ)這一短板的?別急,本節(jié)將就這些問(wèn)題給讀者做一一講解2022-05-05