无法转换为特定格式 C#
Trouble converting to a specific format C#
这个问题可能有点奇怪,但是我已经制作了一个与另一个程序通信的程序(另一个程序不是我制作的)。我需要将 'distances' 发送到其他程序,但是我无法理解该程序如何解释这些距离。
我截获了一个成功向程序发送距离的设备。下面是发送距离的示例。我认为该程序在远处读取为 ushort。希望我会遗漏一些简单的东西,因为我似乎无法将我的距离转换为相同的格式。
例如:
要发送的距离是 74。发送的字节是 [0, 74]。这作为 ushort 是 18944.
我最初的想法是将距离转换为短距离。然后将 ushort 的字节发送给程序。然而,情况似乎并非如此。
错误的原因是 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);
这个问题可能有点奇怪,但是我已经制作了一个与另一个程序通信的程序(另一个程序不是我制作的)。我需要将 'distances' 发送到其他程序,但是我无法理解该程序如何解释这些距离。
我截获了一个成功向程序发送距离的设备。下面是发送距离的示例。我认为该程序在远处读取为 ushort。希望我会遗漏一些简单的东西,因为我似乎无法将我的距离转换为相同的格式。
例如: 要发送的距离是 74。发送的字节是 [0, 74]。这作为 ushort 是 18944.
我最初的想法是将距离转换为短距离。然后将 ushort 的字节发送给程序。然而,情况似乎并非如此。
错误的原因是 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);