c++ - 将无符号整数转换为 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”。
推荐阅读
- javascript - Electron-forge npm run make“错误:找不到您的应用程序的主要入口点。”
- python - Pandas 数据框对字符串值进行排序并按聚合值降序排列
- javascript - HTML base href 和 Angular APP_BASE_HREF 有什么区别?
- java - 如何使用 Java MongoOperations 计算 Mongodb 集合的数据大小?
- r - 命名矩阵列的错误 - 数组长度不匹配且未使用的参数
- javascript - 检测链接何时被关注
- elasticsearch - 尝试在 kibana 仪表板中可视化索引弹性搜索数据的数据完整性
- c# - 向 ScrollView、List Box 等添加元素时如何添加延迟
- visual-studio-code - 按下选项卡而不是 Visual Studio Code 上的自动完成时插入选项卡
- node.js - 当我尝试创建新事件(NodeJs / Mongoose)时,我的数据没有保留