C ++将两个字节解析为int

时间:2018-11-13 12:30:59

标签: c++ int byte

我有两个字节通过I2C从传感器读取,这些字节存储为unsigned char。我知道哪个是最高有效字节,哪个是最低有效字节。

unsigned char yawMSB;
unsigned char yawLSB;

我将如何将这两个字节的数据转换为单个int

我已经使用C#在C#中正确实现了

BitConverter.ToInt16(new byte[] { yawLSB, yawMSB }, 0)

2 个答案:

答案 0 :(得分:5)

在16位整数中,高8位是最高有效字节,低8位是最低有效字节。

要使最高有效字节占据前几位,您需要将其值向上移动(8位),这是通过向左移动按位运算符<<完成的。

然后要获得最低有效字节,您只需使用按位或|将低8位相加即可。

放在一起就像yawMSB << 8 | yawLSB

答案 1 :(得分:3)

  

我确实知道哪个是最高有效字节,哪个是最低有效字节。

  • MSB表示大多数有效字节。
  • LSB表示最低有效字节。
  

如何将这两个字节的数据转换为单个浮点数?

然后您可以构建一个浮点数,其值为:

const float yaw = yawMSB << 8 + yawLSB;

实际上,值yawMSB << 8 + yawLSB可能在实现定义的范围内。如果为true,并且是从0MAX_YAW的线性比例,则应将值定义为:

const float yaw = float(yawMSB << 8 + yawLSB) / MAX_YAW; // gives yaw in [0.f, 1.f].