c#与Java跨语言socket传输float

方法一在Java端直接传输一个float,c#接收如下:


while(true)
{
data = new byte[4];
            recv = client.Receive(data);
            Console.WriteLine("recv=" + recv);
                String s = Encoding.ASCII.GetString(data, 0, recv);//接收数据为字符串
                float f = float.Parse(s);//将字符串转化为int
}
但这样由于跨语言的原因,我们在将字符串s进行操作时很有可能报错,这时我们可以运用下面的方法二


方法二

我们可以考虑在损失一定精度的情况下,将float用int形式保存(如14.5251,我们可以用14525代替,相应的接收端除以1000还原即可),然后转化为byte数组,用socket传送byte数组,接收端再将byte数组还原为int,然后除以1000得到float。(当然也可以直接float转为byte数组,有兴趣的可以自己尝试)

其中,int存为byte数组的Java端代码如下。(参考了一篇很棒的博客点击打开链接

<pre name="code" class="java"> // int转换为byte[4]数组  
    public static byte[] getByteArray(int i) {  
        byte[] b = new byte[4];  
        b[0] = (byte) ((i & 0xff000000) >> 24);  
        b[1] = (byte) ((i & 0x00ff0000) >> 16);  
        b[2] = (byte) ((i & 0x0000ff00) >> 8);  
        b[3] = (byte)  (i & 0x000000ff);  
        return b;  
    }  


 而c#端接收处理如下: 

while (true)
 {
	//用死循环来不断的从客户端获取信息
            data = new byte[4];
           recv = client.Receive(data);
            int n = BitConverter.ToInt32(data, 0);
}


BitConverter.ToInt32(data,0)方法中data即为byte[4]数组,0表示从数组的第几位开始读取




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值