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

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


问题是我得到的值不正确。我认为问题是我必须进行某种封送处理,但我不知道该如何做。
C ++应用程序使用#pragma pack(1)声明。

最佳答案

如果C ++应用程序正在发送浮点值,则需要使用BitConverter.ToSingle而不是ToInt32()。但是,从您的问题尚不清楚,是这种情况还是C ++应用程序正在发送您只想保存为float值的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);


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

关于c# - 字节数组编码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30776100/

10-12 01:31