字节阵列编组

时间:2015-06-11 08:56:47

标签: c# c++ marshalling

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

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

问题是我得到的值不正确。我认为问题在于我必须做某种编组,但我不知道该怎么做。 C ++应用程序使用#pragma pack(1)声明。

2 个答案:

答案 0 :(得分:0)

如果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);

现在,您可以使用该数据执行任何操作。

答案 1 :(得分:0)

UDP应用程序可以序列化对象并通过UDP套接字传输消息,而不是编组。这是一个现代的方法,并且可以使用may C ++库(例如:使用boost库进行序列化非常容易且快速实现。