-2

我需要将浮动的小端转换为大端并通过UDP发送它们。截断的代码接收坐标数据并将其分配给浮点数组,然后转换为字节数据数组,最后应该通过 UDP 连接发送,但它不起作用!

public void SendUDP()
    {
        try 
        {
            lockObj.EnterReadLock();
            try
            {   
                foreach(CoordData datam in coordDataList)
                {
                    float[] dfv = {datam.X, datam.Y, datam.Z, datam.Alpha, datam.Theta, datam.Phi};

                    /*
                    data = BitConverter.GetBytes(datam.Y);
                    data = BitConverter.GetBytes(datam.Z);
                    data = BitConverter.GetBytes(datam.Alpha);
                    data = BitConverter.GetBytes(datam.Theta);
                    data = BitConverter.GetBytes(datam.Phi);
                */
                data = BitConverter.GetBytes(dfv);  
                Array.Reverse(data);    

                }
                client.Send(data, data.Length, remoteEndPoint); 

            }
                finally
                {
                lockObj.ExitReadLock();

                }

                }

        catch (Exception err)
        {
            print(err.ToString());
        }
    }
4

3 回答 3

1

您的问题是您正在反转整个浮点数组。您需要反转每个浮点数的字节

实际上,您在问题中写的内容甚至不会编译,因为没有BitConverter.GetBytes需要数组的重载。

你必须做的(除了使用现有的库函数来为你处理)是这样的:

List<byte> myData = new List<byte>();

myData.AddRange(Array.Reverse(BitConverter.GetBytes(datam.x));
myData.AddRange(Array.Reverse(BitConverter.GetBytes(datam.y));
//....etc....

byte[] bytesToSend = myData.ToArray();
于 2012-11-27T15:46:46.513 回答
1

您应该使用IPAddress.HostToNetworkOrder()来确保您的值对于您的环境是正确的。

于 2012-11-27T16:07:06.183 回答
0

这是该问题的解决方案:

    int width = sizeof(float);

    int nDataIndex = 0;
    byte[] data = new byte[myData.Count * width];

        for (int i = 0; i < myData.Count; ++i)
        {
            byte[] converted = BitConverter.GetBytes(myData[i]);

            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(converted);
            }

            for (int j = 0; j < width; ++j)
            { 

                data[nDataIndex+j] = converted[j];          
            }
            nDataIndex+=width;
        }

        client.Send(data, data.Length, remoteEndPoint);
于 2012-12-12T12:23:39.323 回答