方法一在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表示从数组的第几位开始读取