将 Unsigned Int 转换为 BCD
Converting Unsigned Int to BCD
我有一个函数可以将 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);
在 C 或 C++ 中,以“0”开头的文字整数被解释为八进制数。 “0056”就是我们人类,用十个手指,叫“46”。
我有一个函数可以将 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);
在 C 或 C++ 中,以“0”开头的文字整数被解释为八进制数。 “0056”就是我们人类,用十个手指,叫“46”。