任意の数値をBCDに変換する / double dabbleアルゴリズム / C

型指定する以外はCもPythonと同じように書ける。

#include <iostream>
using namespace std;

uint16_t bin2bcd_dubdab(uint16_t _bin) {
    uint8_t BITS_BCD = sizeof(_bin) * 8;
    uint16_t bcd = 0;
    for (int i = BITS_BCD - 1; i > 0; i--) {
        bcd = (uint32_t)(bcd) << 1 | (_bin >> i & 1);
        for (int j = BITS_BCD; j > -1; j -= 4) {
            if ((bcd >> j & 0xF) > 4) {
                bcd += 3 << j;
            }
        }
    }
    return (uint32_t)(bcd) << 1 | (_bin & 1);
}
int main(void) {
    uint16_t val = 9876;
    printf("0x%x\n", bin2bcd_dubdab(val));
    return 0;
}

f:id:ti-nspire:20210428081327p:plain