将未签名的INT转换为BCD

Converting Unsigned Int to BCD

本文关键字:转换 BCD INT      更新时间:2023-10-16

我具有将uint16_t转换为BCD的函数。

uint16_t uint162BCD(uint16_t value)
{
    uint16_t b_val = 0;
    unsigned int shift = 0;
    while (shift / 8 < sizeof(bcd))
    {
        b_val = static_cast<uint16_t>(b_val + ((value % 10) << shift));
        value = value / 10;
        shift = shift + 4;
    }
    return b_val;
}

我对以下值进行了小型单位测试

ASSERT_EQ(uint162BCD(0), (uint16_t) 0x0);
ASSERT_EQ(uint162BCD((uint16_t) 1), (uint16_t) 0x1);
ASSERT_EQ(uint162BCD((uint16_t) 12), (uint16_t) 0x12);
ASSERT_EQ(uint162BCD((uint16_t) 123), (uint16_t) 0x123);
ASSERT_EQ(uint162BCD((uint16_t) 56), (uint16_t) 0x56);

这些似乎是按预期转换的。但是,如果我这样做。

ASSERT_EQ(uint162BCD((uint16_t) 0056), (uint16_t) 0x56);

它不起作用。我期望的值与0x56相同。我在做什么错?

ASSERT_EQ(uint162BCD((uint16_t) 0056), (uint16_t) 0x56);
以" 0"开头的C或C 的字面整数被解释为八十位数字。" 0056"是我们人类,用十个手指,呼叫" 46"。