簡體   English   中英

將二進制編碼的十進制 (BCD) 解碼為無符號 integer

[英]Decode binary coded decimal (BCD) to unsigned integer

我的項目中使用的值用 4 位二進制編碼十進制 (BCD) 表示,它最初存儲在字符緩沖區中(例如,由指針const unsigned char *指向)。 我想將輸入的 BCD 字符 stream 轉換為 integer。 你能告訴我一個有效和快速的方法嗎?

數據格式示例和預期結果:

BCD*2; 1001 0111 0110 0101=9765
       "9"  "7"  "6"  "5"

非常感謝!

unsigned int lulz(unsigned char const* nybbles, size_t length)
{
    unsigned int result(0);
    while (length--) {
        result = result * 100 + (*nybbles >> 4) * 10 + (*nybbles & 15);
        ++nybbles;
    }
    return result;
}

這里的length指定輸入中的字節數,因此對於 OP 給出的示例, nybbles將是{0x97, 0x65}並且length將是 2。

您可以像這樣破譯最右邊的數字:

const unsigned int bcdDigit = bcdNumber & 0xf;

然后您可以將數字向右移動,以便下一個數字變為最右邊:

bcdNumber >>= 4;

不過,這會以錯誤的順序為您提供數字(從右到左)。 如果你知道你有多少位數,你當然可以直接提取正確的位。

使用例如(bcdNumber >> (4 * digitIndex)) & 0xf; 提取digitIndex :th 數字,其中數字 0 是最右邊的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM