解决C++与Java 使用Socket Float数据类型的正确互传

本人在大三做一个不同小组Socket通信的大作业时,由于近日自学了一点Android,在其他小组均使用C++的情况下,决定使用Android写一个简单客户端程序。本想只要不同小组协议相同,实现起来应该没有特别大的难度,奈何自己编程能力着实有限,在互传数据时候遇到了十分棘手的问题。由于Java和C++在Float类型的数据处理方面有一定的不同,导致双方都无法正确收到float类型的数据。而网上大部分博客解决的都是java Float数据与字节数组的互转,少有C++方的解析方法,在继续查阅资料外加自己的一点想法,终于些许解决了互传float的问题,废话少说,先上结论:

1、Java与C++数据通信,如果不想用String类型,一定都要化成字节数组,C++方面使用char[] 代替即可

2、本次大作业里面C++是用Qt来写的,读取数据使用QDataStream,经试验表明,Java客户端不能使用封装好的sendFloat 或者 sendInt 等函数,否则读取方读取所需的字节数(如sendFloat发送后,C++读取4字节)后就停止继续读取了,虽然这里我也不知道为什么。但是当我把所有的数据都放入一个字节数组,一次发送后,Qt端便可以正确读取。

3、按照网上提供的将Java常见数据类型转化为字节数组的方法,包括Float的各种常见数据类型都可以正确转化,使用Java的 DataOutputStream流的send()函数,将整个字节数组一次发送。在Qt服务器端,Int型,Byte型,Short型都可以正确接收,唯独Float型,得到的都是0。感谢优快云,尤其感谢博主 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值