[英]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.