C# 转换为特定格式C时出现问题#

C# 转换为特定格式C时出现问题#,c#,byte,ushort,C#,Byte,Ushort,这可能是一个有点奇怪的问题,但是我制作了一个与另一个程序通信的程序(另一个程序不是我自己制作的)。我需要向另一个程序发送“距离”,但我无法理解程序如何解释这些距离 我截获了一个设备,它成功地向程序发送了距离。下面是发送距离的示例。我认为这个程序在远处读起来像是一个ushort。希望有一件简单的事情我错过了,因为我似乎无法将我的距离转换成相同的格式 例如: 发送距离为74。发送的字节为[0,74]。这是18944 我最初的想法是距离被转换成了距离。然后将ushort的字节发送到程序。然而,情况似乎

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

我截获了一个设备,它成功地向程序发送了距离。下面是发送距离的示例。我认为这个程序在远处读起来像是一个ushort。希望有一件简单的事情我错过了,因为我似乎无法将我的距离转换成相同的格式

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

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

这就是错误的原因:

  • 发送方:
    74(int16)=[0,74]
    -先是高字节,然后是低字节
  • 接收器:
    74(int16)=[74,0]
    -先是低字节,然后是高字节
这就是为什么接受者会

   0 + 74 * 256 == 18944
尝试检查小/大端(即字节顺序):


首先,多次声明你的问题可能很奇怪或愚蠢是没有帮助的。没有愚蠢的问题。但是,在这里提出问题之前,您必须进行研究,并且您必须向我们展示您迄今为止尝试过的代码,以便我们可以查看它并可能看到任何错误。请看一看。看起来设备需要的是小尾端,而不是大尾端。
74*256+0=18944
;请检查顺序:
Little/Big
Endian
除了Endian类型之外,您如何将距离发送到其他程序,以及如何知道这是不正确的?@Deolus它们是以字节数组的形式发送的。我知道它们是正确的,因为接收端的程序会显示它们。谢谢,这非常有帮助我接受了答案,只是一个简单的问题,我的程序是用C#编写的,默认情况下似乎是big-endian。另一个程序是用C编写的,你知道默认情况下是不是little endian吗?@Lucy Copp:Endianness取决于CPU体系结构(例如Intel x86和x86-64使用little endian)。一些CPU(如ARM、Sparc)允许选择所需的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);