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