加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15915421161

SIEMENS江苏省连云港市 西门子代理商——西门子华东一级总代理

更新时间
2024-07-04 07:00:00
价格
请来电询价
西门子总代理
PLC
西门子一级代
驱动
西门子代理商
伺服电机
联系电话
15903418770
联系手机
15915421161
联系人
张经理
立即询价

详细介绍
数据拆分与重组

这里写了测试函数,先将float拆分为4个字节,保存在tbuf[0]~tbuf[3]中,并先打印查看是否正确。如果是在实际应用中,这时就可以将4个数据以hex的形式发送出去了。

然后将数据重组,这里直接使用tbuf[0]~tbuf[3]模拟接收方接收到的4个hex数据,将重组后的数据保存在res变量中,重组的方法也是根据float在计算机占4个字节,通过unsigned char指针依次为float的4个字节赋值即可





























void test_float_to_4hex(float num){    unsigned char tbuf[4];    unsigned char *p = (unsigned char*)&num + 3;//指针p先指向float的Zui高字节    float res;//验证float拆分为4个字节后,重组为float的结果
   //先打印一下传入的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即可:





























void test_int_to_4hex(int num){    unsigned char tbuf[4];    unsigned char *p = (unsigned char*)&num + 3;//指针p先指向int的Zui高字节    int res;//验证int拆分为4个字节后,重组为float的结果
   //先打印一下传入的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 b = -85776553;test_int_to_4hex(b);

结果:

传入的int的值:-85776553
查看int的每个字节内容(16进制):
57,27,e3,fa

重组后的int的值:-85776553


相关产品

联系方式

  • 电  话:15903418770
  • 联系人:张经理
  • 手  机:15915421161
  • 微  信:15915421161