这可能是一个奇怪的问题,但是我编写了一个与另一个程序进行通信的程序(另一个程序不是我创建的)。我需要将“距离”发送到另一个程序,但是我无法理解该程序如何解释这些距离。

我截获了一个可以成功向程序发送距离的设备。以下是发送距离的示例。我认为程序在远处读取为ushort。希望我会缺少一些简单的东西,因为我似乎无法将距离转换为相同的格式。

例如:
要发送的距离为74。发送的字节为[0,74]。作为ushort的是18944。

我最初的想法是将距离转换为ushort。然后,将ushort的字节发送到程序。但是,事实并非如此。

最佳答案

错误的原因是Endianness


发件人:74 (int16) == [0, 74]-首先是高字节,然后是低字节
接收者:74 (int16) == [74, 0]-首先是低字节,然后是高字节


这就是为什么接收者得到

   0 + 74 * 256 == 18944


尝试检查Little / Big Endian(即字节顺序):

   byte[] data = new byte[] { 0, 74 };

   // If the WorkStation uses Little Endian order, we have to reverse the buffer
   ushort dist = BitConverter.ToUInt16(BitConverter.IsLittleEndian
       ? data.Reverse().ToArray()
       : data,
     0);

   // 74
   Console.WriteLine(dist);

关于c# - 无法转换为特定格式的C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46154609/

10-10 00:32