这可能是一个奇怪的问题,但我已经制作了一个与另一个程序通信的程序(另一个程序不是由我制作的)。我需要发送距离'到另一个程序,但是我无法理解程序如何解释这些距离。
我截获了一个成功向程序发送距离的设备。以下是发送距离的示例。我认为该程序读取的距离为ushort。希望我能错过的很简单,因为我似乎无法将我的距离转换为相同的格式。
例如: 要发送的距离是74.发送的字节是[0,74]。这个作为ushort是18944。
我最初的想法是距离转换为ushort。然后将ushort的字节发送到程序。然而,情况似乎并非如此。
答案 0 :(得分:3)
导致错误的是Endianness:
74 (int16) == [0, 74]
- 第一个高,然后是低字节74 (int16) == [74, 0]
- 先低,然后是高字节这就是收货人获取的原因
0 + 74 * 256 == 18944
尝试检查 Little / Big Endian (即字节的 order ):
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);