我有两个字节通过I2C从传感器读取,这些字节存储为unsigned char
。我知道哪个是最高有效字节,哪个是最低有效字节。
unsigned char yawMSB;
unsigned char yawLSB;
我将如何将这两个字节的数据转换为单个int
?
我已经使用C#在C#中正确实现了
BitConverter.ToInt16(new byte[] { yawLSB, yawMSB }, 0)
答案 0 :(得分:5)
在16位整数中,高8位是最高有效字节,低8位是最低有效字节。
要使最高有效字节占据前几位,您需要将其值向上移动(8位),这是通过向左移动按位运算符<<
完成的。
然后要获得最低有效字节,您只需使用按位或|
将低8位相加即可。
放在一起就像yawMSB << 8 | yawLSB
。
答案 1 :(得分:3)
我确实知道哪个是最高有效字节,哪个是最低有效字节。
如何将这两个字节的数据转换为单个浮点数?
然后您可以构建一个浮点数,其值为:
const float yaw = yawMSB << 8 + yawLSB;
实际上,值yawMSB << 8 + yawLSB
可能在实现定义的范围内。如果为true,并且是从0
到MAX_YAW
的线性比例,则应将值定义为:
const float yaw = float(yawMSB << 8 + yawLSB) / MAX_YAW; // gives yaw in [0.f, 1.f].