BCD码与十进制转换
1.BCD碼 概念
BCD碼(Binary-Coded Decimal?)稱為二進碼十進數或二——十進制代碼。用4位二進制數來表示1位十進制數中的0~9這10個數碼。BCD碼可分為有權碼和無權碼兩類:有權BCD碼有8421碼、2421碼、5421碼,其中8421碼是最常用的BCD碼。無權BCD碼有余3碼,余3循環碼等。
1.1 8421碼
8421 BCD碼是最基本和最常用的BCD碼,它和四位自然二進制碼相似,各位的權值為8、4、2、1,故稱為有權BCD碼。和四位自然二進制碼不同的是,它只選用了四位二進制碼中前10組代碼,即用0000~1001分別代表它所對應的十進制數,余下的六組代碼不用。如十進制數8的BCD碼是1000。
1.2 5421碼
5421 BCD碼是有權BCD碼,從高位到低位的權值分別為5、4、2、1。
1.3 2421碼
2421 BCD碼為有權BCD碼,從高位到低位的權值分別為2、4、2、1。
1.4 余3碼
余3碼是8421 BCD碼的每個碼組加3(0011)形成的。常用于BCD碼的運算電路中。
2.BCD 碼應用場合
BCD碼目前最常使用的應該是時鐘芯片中,從時鐘芯片中獲取的時間數據即是BCD碼格式,需要程序員將其轉換為十進制數據。其他應用場合還包括,PLC控制輸入、撥碼開關輸入、數碼管控制等。
2.1原理
比如BCD碼:0x99(153),該BCD碼轉換成十進制是99.
十進制是逢十進一,而十六進制是逢十六進一,它們之間的每次進位差6,所以一個十進制數要轉換成BCD碼,要先算清多進位的位數,比如,十進制99進位了99/10=9次,每次進位和十六進制進位相比差6,所以一共差了9×6=54,即99+54=153(BCD)。BCD碼轉化成十進制碼也一樣。
2.2代碼
static uint8_t BCD2DEC(uint8_t bcd) { return (bcd-(bcd>>4)*6); } static uint8_t DEC2BCD(uint8_t dec) { return (dec+(dec/10)*6); }qt示例獲取7位BCD datetime
void main() {GetCurBCDTime7(unsigned char* pBcdTime){QDateTime datetime = QDateTime::currentDateTime();pBcdTime[0]=DEC2BCD(datetime.date().year()/100);pBcdTime[1]=DEC2BCD(datetime.date().year()%100);pBcdTime[2]=DEC2BCD(datetime.date().month());pBcdTime[3]=DEC2BCD(datetime.date().day());pBcdTime[4]=DEC2BCD(datetime.time().hour());pBcdTime[5]=DEC2BCD(datetime.time().minute());pBcdTime[6]=DEC2BCD(datetime.time().second());for(int index=0;index<7;index++){qDebug()<<BCD2DEC(pBcdTime[index]);}} }總結
以上是生活随笔為你收集整理的BCD码与十进制转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 360 linux 扩展文件夹,360签
- 下一篇: centos 7用ss命令来查看端口占用