У меня есть функция для преобразования 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. Что я делаю не так?