字节数组封送

本文关键字:数组 字节数 字节 | 更新日期: 2023-09-27 17:55:23

我的应用程序通过 UDP 套接字从另一个应用程序接收结构。另一个应用程序是用C++编写的。该结构具有不同类型的变量。在我的应用程序端,我将收到的消息从字节数组解码为所需的类型,并将其放入字典类型变量中,DecodedMessage如下方式:

DecodedMessage.Add("VarName", (float)BitConvertor.ToInt32(Buffer, VarOffset));

问题是我得到的值不正确。我相信问题是我必须做某种封送工作,但我不知道该怎么做。C++应用程序使用 #pragma pack(1) 声明。

字节数组封送

如果C++应用程序正在发送浮点值,则需要使用 BitConverter.ToSingle 而不是 ToInt32()。但是从您的问题中不清楚是否是这种情况,或者C++应用程序是否正在发送您只想保存为浮点值的 int 值。

编辑

好的,您的C++应用程序正在发送某个结构,让我们假设它看起来像这样:

struct whatever
{
   int var1;
   float var2;
   byte var3[16];
}

由于您知道数据的结构,因此可以使用BinaryReader读取它,如下所示:

var binReader = new BinaryReader(new MemoryStream(Buffer));
int var1 = binReader.ReadInt32();
float var2 = binReader.ReadSingle();
byte[] var3 = binReader.ReadBytes(16);

现在,您可以对这些数据做任何您想做的事情。

UDP 应用程序可以序列化对象并通过 UDP 套接字传输消息,而不是封送。这是一个现代的mathod,并受到可能C++库的支持(例如:使用boost库的序列化非常容易和快速地实现。