十六進製制和BCD碼的那些事 終結篇

2021-06-13 02:37:29 字數 1429 閱讀 6828

十六進製制轉為bcd碼好理解,有問題的是bcd碼轉為十六進製制數;

hex2bcd:

0x3f的bcd碼是多少?正確答案:99,或者0x63

0x3f=63,再加0x,->0x63, 再把0x63轉為99(0x63=99)

1、如果要表示為十六進製制,則轉換為10進製數,前面加0x符號;(十六進製制表示)

2、如果要表示為十進位制,則先轉換為10進製數,前面加0x符號,再把加上符號的

十六進製制數轉為十進位制數;(十進位制表示)

如果乙個數為0x38,則bcd碼為86

bcd2hex:(注:)

1、如果這個數是16進製表示的,把0x符號去掉,當成10進製數直接轉換為16進製制數即可;

(前提是這個16進製表示的數的任何一位不能大於9,也就是說不能出現a、b、c、d、e、f)

如:0x999,去掉0x,->999,再轉為十六進製制數為0x3e7

2、如果這個數是十進位制表示的,先把這個數轉換為16進製制數,再把0x符號去掉,當成

十進位制數,再轉化為十六進製制數即可;(注:這個數要在一定範圍內,才行,如999轉換為

十六進製制為0x3e7,把0x去掉,3e7不在10進製表示範圍內,)

上面說的是在一定範圍內的數,對於不在一定範圍內的數怎麼轉?剛開始還真不好理解,

是因為學校教給我們的數學規則限制了我們的思維,對於乙個數3e7,當成10進製怎麼理解?

還是按十進位制來,個位、十位、百位...,只不過現在十位上的數是14,

bcd碼999轉換為十六進製制是多少?正確答案:447,若者0x1bf,為什麼?想不通...

轉換過程:

999轉為十六進製制,->0x3e7,

33*10+e=44

(3*10+e)*10+7

=447

也就相當於0x3e7當成10進製理解,則是3*100+e*10+7,簡單不?

注:乙個十六進製制數轉為bcd碼,但這個bcd碼再轉為十六進製制數,不等於這個數;

如:如果乙個數為0x999,hex2bcd(0x999)=0x2547(9543),bcd2hex(0x2547)=0x9f3(2547)

而乙個bcd碼的數可以轉為十六進製制數,這個十六進製制數可以反轉為bcd碼,可能等於這個

數(這個數是十六進製制表示,且每一位的數字在0~9之間);也可能不等於這個數;

如:bcd2hex(0x999)=0x3e7(999),hex2bcd(0x3e7)=2457(0x999)(等於)

bcd2hex(0x9f3)=0x41d(1053),hex2bcd(0x41d)=0x1053(4179)

bcd2hex(999)=0x1bf(447),hex2bcd(0x1bf)=0x447(1095)(不等於)

bcd2hex(0x447)=0x1bf(447),hex2bcd(0x1bf)=0x447(1095)(等於)

結論:16進製制轉bcd不可逆,bcd轉16進製制有可能可逆。

c 轉bcd碼 BCD碼 十六進製制與十進位制互轉

在做嵌入式軟體的設計中,經常會遇到十六進製制 bcd碼與十進位制之間的轉換,最近做m1卡的應用中,涉及了大量的十六進製制 bcd碼與十進位制之間的轉換。筆者通過對bcd碼 十六進製制 權的理解,輕鬆的實現了他們之間的互換。include include 功能 二進位製取反 輸入 const unsi...

BCD碼 十六進製制 十進位制 互轉

include include 功能 二進位製取反 輸入 const unsigned char src 二進位制資料 int length 待轉換的二進位制資料長度 輸出 unsigned char dst 取反後的二進位制資料 返回 0 success int convert unsigned ...

BCD碼與十六進製制值轉換

bcd碼中最常用的就是8421型bcd碼數值,儀器為例使用以下方法進行轉換 bcd 碼 轉 十進位制 define bcd to decimal x x 0xf0 4 10 x 0x0f 十進位制 轉 bcd 碼 define decimal to bcd x x 10 4 x 10 brief 十...