如何将uint8_t array[2]
转换为uint16_t value
我正在从i2c设备读取两个字节的数据到一个数组中,并且必须将其转换为整数才能对数据进行转换。
static int i2cRead(uint8_t *buffer, uint32_len, uint16_t addr);
static uint16_t readVaue(uint8_t reg) {
uint8_t buff[2];
i2cWrite(&buff, sizeof(buff), I2CADDR)
buffer = // STUCK HERE
}
答案 0 :(得分:2)
您需要将高字节移位8位,并使用低位进行逻辑或运算。另外,请务必先将每个值转换为uint16_t
,否则您的风险会被移位的值被截断:
uint8_t buff[2];
i2cWrite(&buff, sizeof(buff), I2CADDR)
uint16_t value = 0;
value |= (uint16_t)buff[0] << 8;
value |= (uint16_t)buff[1];
答案 1 :(得分:2)
#include <stdio.h>
#include <stdint.h>
int main(void)
{
uint8_t array[] = {0xAA, 0x55};
// Big endian conversion
uint16_t value = ((uint16_t)(array[0])<<8) + array[1];
printf("%X\n", value);
// Little endian conversion
value = ((uint16_t)(array[1])<<8) + array[0];
printf("%X\n", value);
}
答案 2 :(得分:1)
取决于字节顺序
... = 256U * buff[0] + buff[1];
或
... = 256U * buff[1] + buff[0];