類似通信格式的實現關鍵點:
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 位無符號整數。 |