[英]BCD Calculator issue
我正在將十六進制0xE0
轉換為BCD。 當我這樣做時,我得到的是64。我知道這是完全錯誤的,也許這是我的C ++代碼中的問題,但是64聽起來不正確。 有任何想法嗎? 0xE0
是特例嗎? ( 0xE0
為十進制224。)
這是我的代碼的一部分:
unsigned char Hex2BCD(unsigned char param)
{ unsigned char lo;
unsigned char hi;
unsigned char val;
unsigned char buf[10];
hi = param/ 10;
lo = param- (hi * 10);
val= (hi << 4) + lo;
return val;
}
我的想法是,您轉換為BCD的代碼存在錯誤。 它沒有執行預期的操作,因此您所觀察到的結果是錯誤的。
除了這個笑話:如果存儲在帶符號的char中,則為0xe0為負數。 如果您在計算結果時不特別注意所使用的臨時變量的符號,那么這可能會給您帶來麻煩。
編輯:現在,您已經發布了一些代碼,很顯然,盡管您將第一個數字的正確值計算為lo
,但是還需要執行另一步驟才能將正確的值獲取為hi
。
使用0xe0
作為輸入,您實際上是在計算(22<<4) + 4 = 356 = 0x164
而不是(2<<8)+(2<<4)+4 = 548 = 0x224
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.