weixin_43668961
_Shrek
采纳率0%
2020-09-26 20:13

在接收端如何把接收到的十六进制的双精度浮点型数据转换为十进制的数据输出?

1、在发送端定义一个发送数据
a = 12;

2、与网络通信助手连接后,生成的hex值为:0C 00 00 00

3、接收端连接通信后,接收到这个值并把这个值从十六进制转为十进制;代码为:
temp = (unsigned char)buf[count + 3] << 24 | (unsigned char)buf[count + 2] << 16 | (unsigned char)buf[count + 1] << 8 | (unsigned char)buf[count + 0] << 0;
a = *(int *)&temp;

4、运行程序 结果无误

/****************************************************/
但是如果发送端输出double类型的数据a=1.224455887,接收端按照上述代码编写,修改一个地方:a = (double)&temp; (把变量temp本身的地址强制类型转化成double型并取出指针的值)
运行程序,结果乱码,并没有生成double类型的数据。
这是为什么呢?该如何编写接收端的代码才能才能把双精度浮点型的数据转换成十进制数据?
请大佬们帮忙!感谢!欢迎交流!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • weixin_42910064 泡视界 7月前

    double 与 int 构成形式不一样,不可以这么来作。

    你可以在接收端将数据保存为int型, 发送,在接收端将int 作16转10, 最后转为浮点型。

    比如

    //发端
    a = 1.224455887;
    a = a * 1000000000;
    //将a从10进制转为16进制
    
    //发送
    
    //收端
    //将接收数据从16进制转为10进制
    double b
    b = a / 1000000000;
    

    当然你这样做还需额外考虑数值是否会超过int型的最大值。

    点赞 评论 复制链接分享

相关推荐