1

这可能是一个有点奇怪的问题,但是我制作了一个与另一个程序通信的程序(另一个程序不是我制作的)。我需要向其他程序发送“距离”,但是我无法理解程序如何解释这些距离。

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

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

我最初的想法是将距离转换为 ushort。然后将 ushort 的字节发送给程序。然而,情况似乎并非如此。

4

1 回答 1

3

错误的原因是字节顺序:

  • 发送者: 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);
于 2017-09-11T11:35:28.030 回答