[英]Trouble converting to a specific format C#
這可能是一個奇怪的問題,但我已經制作了一個與另一個程序通信的程序(另一個程序不是由我制作的)。 我需要將“距離”發送到另一個程序,但是我無法理解程序如何解釋這些距離。
我截獲了一個成功向程序發送距離的設備。 以下是發送距離的示例。 我認為該程序讀取的距離為ushort。 希望我會丟失一些簡單的東西,因為我似乎無法將我的距離轉換為相同的格式。
例如:要發送的距離是74.發送的字節是[0,74]。 這個作為ushort是18944。
我最初的想法是距離轉換為ushort。 然后將ushort的字節發送到程序。 然而,情況似乎並非如此。
這是導致錯誤的Endianness :
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.