贴代码记录一下
/*
* @Descripttion: 18位(需拼接)有符号数转换成32位有符号数
* @version:
* @Author: wang xuanbin
* @Date: 2021-11-18 13:40:06
* @LastEditors: sueRimn
* @LastEditTime: 2021-11-18 15:57:30
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main()
{
uint16_t point_y = 0xfc; //低16位数
int8_t val8 = 0xff;
uint32_t val_data = val8; //取到的8位数
int tmp_y = 0;
if ((val8 & 0x20) == 0x20)
{
//如果符号位为1
//高位补1
tmp_y |= 0xfffc0000;
}
tmp_y |= point_y; //将低16位加到tmp里边
tmp_y |= ((val_data & 0x30) << 12); //取第4,5位移到第16,17位
//tmp则为最后转换后的数字
//pt.y = tmp_y / 4.0 * 0.01;
return 0;
}