将数组转换为int

时间:2016-05-03 15:40:25

标签: c arrays

如何将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
}

3 个答案:

答案 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];