首页 > 解决方案 > 将 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;

使用错误的方法来获得我需要的东西?还是缺少什​​么?

标签: c

解决方案


也许您打算使用十六进制数字:

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。


推荐阅读