类似通信格式的实现关键点:
byte数组转float的实现,BitConvetor.toSingle()
float类型转by,BitConverter.GetBytes
#客户端发送
public byte[] funFloattoBytes(byte command,float[] coordinate_camera) { List<byte> bufferList = new List<byte>(); bufferList.Add(command); for (int i = 0; i < coordinate_camera.Count(); i++) { byte[] bufferMid = BitConverter.GetBytes(coordinate_camera[i]); bufferList.AddRange(bufferMid); } return bufferList.ToArray(); } #服务器端接收 //客户端连接成功后,服务器接收客户端发来的消息 byte[] buffer = new byte[1024 * 1024 * 2]; //实际接收到的字节数 int r = sendScoket.Receive(buffer); if (r == 0) { break; } //string str = Encoding.UTF8.GetString(buffer, 0, r); //ShowMsg(sendScoket.RemoteEndPoint + ":" + str); byte command=buffer[0]; float[] receiveCommandFloat=new float[4] ; for (int i = 0; i < receiveCommandFloat.Count(); i++) { receiveCommandFloat[i] = BitConverter.ToSingle(buffer, 4 * i+1); } ShowMsg(command,receiveCommandFloat);
拓展:
在c#中可以使用BitConverter类中的函数进行转换,如下:
名称 |
说明 |
以字节数组的形式返回指定的双精度浮点值。 |
|
以字节数组的形式返回指定的单精度浮点值。 |
|
返回由字节数组中指定位置的八个字节转换来的双精度浮点数。 |
|
返回由字节数组中指定位置的四个字节转换来的单精度浮点数。 |
BitConverter类进行基础数据类型与字节数组之间的相互转换,此类便于操作基本形式的类型。一个字节定义为一个 8位无符号整数。包含的方法如下:
名称 |
说明 |
将指定的双精度浮点数转换为 64 位有符号整数。 |
|
以字节数组的形式返回指定的布尔值。 |
|
以字节数组的形式返回指定的 Unicode 字符值。 |
|
以字节数组的形式返回指定的双精度浮点值。 |
|
以字节数组的形式返回指定的 16 位有符号整数值。 |
|
以字节数组的形式返回指定的 32 位有符号整数值。 |
|
以字节数组的形式返回指定的 64 位有符号整数值。 |
|
以字节数组的形式返回指定的单精度浮点值。 |
|
以字节数组的形式返回指定的 16 位无符号整数值。 |
|
以字节数组的形式返回指定的 32 位无符号整数值。 |
|
以字节数组的形式返回指定的 64 位无符号整数值。 |
|
将指定的 64 位有符号整数转换成双精度浮点数。 |
|
返回由字节数组中指定位置的一个字节转换来的布尔值。 |
|
返回由字节数组中指定位置的两个字节转换来的 Unicode 字符。 |
|
返回由字节数组中指定位置的八个字节转换来的双精度浮点数。 |
|
返回由字节数组中指定位置的两个字节转换来的 16 位有符号整数。 |
|
返回由字节数组中指定位置的四个字节转换来的 32 位有符号整数。 |
|
返回由字节数组中指定位置的八个字节转换来的 64 位有符号整数。 |
|
返回由字节数组中指定位置的四个字节转换来的单精度浮点数。 |
|
将指定的字节数组的每个元素的数值转换为它的等效十六进制字符串表示形式。 |
|
将指定的字节子数组的每个元素的数值转换为它的等效十六进制字符串表示形式。 |
|
将指定的字节子数组的每个元素的数值转换为它的等效十六进制字符串表示形式。 |
|
返回由字节数组中指定位置的两个字节转换来的 16 位无符号整数。 |
|
返回由字节数组中指定位置的四个字节转换来的 32 位无符号整数。 |
|
返回由字节数组中指定位置的八个字节转换来的 64 位无符号整数。 |