SIEMENS江苏省连云港市 西门子代理商——西门子华东一级总代理
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | 更新时间 2024-07-04 07:00:00 价格 请来电询价 西门子总代理 PLC 西门子一级代 驱动 西门子代理商 伺服电机 联系电话 15903418770 联系手机 15915421161 联系人 张经理 立即询价 |
详细介绍
数据拆分与重组
//先打印一下传入的float的值 printf("\r\n传入的float的值:%f", num);
//获取对应的4个字节,从低位到高位,这时就可以用于hex格式的数据传输了 tbuf[0] = *(p-3); tbuf[1] = *(p-2); tbuf[2] = *(p-1); tbuf[3] = *p;
//打印看一下 printf("\r\n查看float的每个字节内容(16进制):\r\n"); printf("%x,%x,%x,%x\r\n", tbuf[0], tbuf[1], tbuf[2], tbuf[3]);
//对拆分后的4个字节进行重组,模拟接收到hex后的数据还原过程 unsigned char *pp = (unsigned char*)&res; pp[0] = tbuf[0]; pp[1] = tbuf[1]; pp[2] = tbuf[2]; pp[3] = tbuf[3];
printf("\r\n重组后的float的值:%f\r\n", res);}
test_float_to_4hex(a);
查看float的每个字节内容(16进制):
9c,c4,78,40
重组后的float的值:3.887000
//先打印一下传入的int的值 printf("\r\n传入的int的值:%d", num);
//获取对应的4个字节,从低位到高位,这时就可以用于hex格式的数据传输了 tbuf[0] = *(p - 3); tbuf[1] = *(p - 2); tbuf[2] = *(p - 1); tbuf[3] = *p;
//打印看一下 printf("\r\n查看int的每个字节内容(16进制):\r\n"); printf("%x,%x,%x,%x\r\n", tbuf[0], tbuf[1], tbuf[2], tbuf[3]);
//对拆分后的4个字节进行重组,模拟接收到hex后的数据还原过程 unsigned char *pp = (unsigned char*)&res; pp[0] = tbuf[0]; pp[1] = tbuf[1]; pp[2] = tbuf[2]; pp[3] = tbuf[3];
printf("\r\n重组后的int的值:%d\r\n", res);}
查看int的每个字节内容(16进制):
57,27,e3,fa
重组后的int的值:-85776553
这里写了测试函数,先将float拆分为4个字节,保存在tbuf[0]~tbuf[3]中,并先打印查看是否正确。如果是在实际应用中,这时就可以将4个数据以hex的形式发送出去了。
然后将数据重组,这里直接使用tbuf[0]~tbuf[3]模拟接收方接收到的4个hex数据,将重组后的数据保存在res变量中,重组的方法也是根据float在计算机占4个字节,通过unsigned char指针依次为float的4个字节赋值即可
//先打印一下传入的float的值 printf("\r\n传入的float的值:%f", num);
//获取对应的4个字节,从低位到高位,这时就可以用于hex格式的数据传输了 tbuf[0] = *(p-3); tbuf[1] = *(p-2); tbuf[2] = *(p-1); tbuf[3] = *p;
//打印看一下 printf("\r\n查看float的每个字节内容(16进制):\r\n"); printf("%x,%x,%x,%x\r\n", tbuf[0], tbuf[1], tbuf[2], tbuf[3]);
//对拆分后的4个字节进行重组,模拟接收到hex后的数据还原过程 unsigned char *pp = (unsigned char*)&res; pp[0] = tbuf[0]; pp[1] = tbuf[1]; pp[2] = tbuf[2]; pp[3] = tbuf[3];
printf("\r\n重组后的float的值:%f\r\n", res);}
测试一下该函数:
//模拟测试float转为4个16进制数进行数据传输的过程test_float_to_4hex(a);
结果:
传入的float的值:3.887000查看float的每个字节内容(16进制):
9c,c4,78,40
重组后的float的值:3.887000
数据重组后可以还原,方法是可以的。
关于int型数据int型数据与float一样都是占用4个字节,所以该方法也适用于将int转换为4个hex,只需修改float类型为int即可:
//先打印一下传入的int的值 printf("\r\n传入的int的值:%d", num);
//获取对应的4个字节,从低位到高位,这时就可以用于hex格式的数据传输了 tbuf[0] = *(p - 3); tbuf[1] = *(p - 2); tbuf[2] = *(p - 1); tbuf[3] = *p;
//打印看一下 printf("\r\n查看int的每个字节内容(16进制):\r\n"); printf("%x,%x,%x,%x\r\n", tbuf[0], tbuf[1], tbuf[2], tbuf[3]);
//对拆分后的4个字节进行重组,模拟接收到hex后的数据还原过程 unsigned char *pp = (unsigned char*)&res; pp[0] = tbuf[0]; pp[1] = tbuf[1]; pp[2] = tbuf[2]; pp[3] = tbuf[3];
printf("\r\n重组后的int的值:%d\r\n", res);}
实测:
结果:
查看int的每个字节内容(16进制):
57,27,e3,fa
重组后的int的值:-85776553
相关产品