c - 将 uint8_t 数组转换为 uint16_t
问题描述
我有一个包含两个元素的 uint8_t 数组:
uint8_t ui8[2]; // uint8_t array
ui8[0] = 70; // LSB
ui1[1] = 60; // MSB
我想从这两个 uin8_t 值中获取一个 uint16_t 数字(不是数组)。我使用这种方法来获得这个结果:uint16_t ui16 = 6070
uint16_t ui16 = ui8[1] | (ui8[0] << 8);
但我得到了uint16_t ui16 = 15430;
使用错误的方法来获得我需要的东西?还是缺少什么?
解决方案
也许您打算使用十六进制数字:
uint8_t ui8[2]; // uint8_t array
ui8[0] = 0x70; // LSB
ui1[1] = 0x60; // MSB
uint16_t ui16 = ui8[1] | (ui8[0] << 8);
printf("%x\n", ui16); // 7060
如果您想使用十进制数,则需要将“MSB”乘以 100 并将它们相加。为此使用十进制数更为罕见。
uint8_t ui8[2]; // uint8_t array
ui8[0] = 70; // LSB
ui1[1] = 60; // MSB
uint16_t ui16 = ui8[1] + (ui8[0] * 100);
printf("%d\n", ui16); // 7060
请不要在这两种情况下,“70”将在“60”之前,因为您正在移动数组的第一个元素(70)。70 将是 MSB。
推荐阅读
- python - 为什么我在尝试使用 Evernote 进行身份验证时收到 KeyError?
- android - 尝试通过(OnItemClickListener)在片段之间添加选定的图像视图,在应用程序崩溃的第二个 ImageView 上
- aws-lambda - 尝试使用无服务器获取 aws lambda
- node.js - 如何在express js中使用特定字段而不是id进行查询
- java - 如何评估一个值是否在 DROOLS 的值列表中
- .net - 如何在 JSON .NET 上对属性名称强制使用引号
- reactjs - 失败的道具类型:提供给“表单(xxx)”的“对象”类型的无效道具“表单”,应为“字符串”
- javascript - 在运行测试时放宽 Chrome 的 CSP (webdriver) (Content-Security-policy)
- javascript - 我的情况下函数声明和函数表达式之间的区别
- mysql - 从两个表总计 SQL 中计算速率