个人网站建站,易语言 网站开发,工程168信息平台,品牌建设的内容有哪些通过modbus协议从流量计中读取数据后#xff0c;需要将获得的字节数据合成float类型。以天信流量计为例#xff1a; 如何将字节数据合并成float类型呢#xff1f;这里总结了三种方法。 以温度值41 A0 00 00为例 目录 1、使用char*逐字节解析2、使用memcpy转换2、使用联合体…通过modbus协议从流量计中读取数据后需要将获得的字节数据合成float类型。以天信流量计为例 如何将字节数据合并成float类型呢这里总结了三种方法。 以温度值41 A0 00 00为例 目录 1、使用char*逐字节解析2、使用memcpy转换2、使用联合体union转换 1、使用char*逐字节解析
float为4个字节将这4个字节依次解析用获取的温度值数据进行替换就能够完成转换。 但是需要注意的是协议帧中除了校验位CRC其余都是高位在前单片机以及PC端都是小端存储高位字节数据应该放在高地址处如下图所示 代码
char data[]{0x41,0xA0,0x00,0x00};int main() {float data_conver;*((char*)(data_conver))data[3];*((char*)(data_conver)1)data[2];*((char*)(data_conver)2)data[1];*((char*)(data_conver)3)data[0];printf(data_conver%f\r\n,data_conver);system(pause);return 0;
}结果
2、使用memcpy转换
因为高字节在前因此直接使用memcpy进行复制内容时需要先将获取的字节数据倒序 代码
//char data[]{0x41,0xA0,0x00,0x00};
char data[]{0x00,0x00,0xA0,0x41};
int main() {float data_conver;memcpy(data_conver,data,sizeof(data_conver));printf(data_conver%f\r\n,data_conver);system(pause);return 0;
}结果
2、使用联合体union转换
联合体union中的数据共用同一段内存可以使用这个特性对数据进行类型转换 代码
char data[]{0x41,0xA0,0x00,0x00};union FourBytes{char bytes[4];float data_conver;
};int main() {union FourBytes a;a.bytes[0]data[3];a.bytes[1]data[2];a.bytes[2]data[1];a.bytes[3]data[0];printf(data_conver%f\r\n,a.data_conver);system(pause);return 0;
}结果
以上三种方法都能实现字节和float数据的转换