我正在编写一个程序,它将通过 UDP 与 C++ 程序通信。另一个程序已经写好了(不是我写的)。我得到了一个 .h 文件,它定义了两个用于数据的结构。
编辑:这意味着我无法更改数据格式。我需要能够根据 C++ .h 文件结构进行读写!
我如何在 C# 中执行此操作?我将以这种格式发送和接收数据。
struct mdata
{
uint32_t mark_kupnr;
uint16_t mark_provnr;
uint16_t markriktning;
uint16_t xpos;
uint16_t ypos;
};
typedef struct
{
uint32_t kupnr;
uint16_t lngd;
uint16_t bredd;
uint16_t tjocklek;
char slagkraft;
uint8_t antal;
struct mdata mark[10];
} markdata;
编辑:我试图在 C# 中创建相应的结构,但它不起作用
顺便说一句,我在 Windows 上运行,而 C++ 程序在 Linux 上运行。在“规范”中它说数据应该是 Little Endian。
struct mdata
{
UInt32 mark_kupnr;
UInt16 mark_provnr;
UInt16 markriktning;
UInt16 xpos;
UInt16 ypos;
};
typedef struct
{
UInt32 kupnr;
UInt16 lngd;
UInt16 bredd;
UInt16 tjocklek;
char slagkraft;
byte antal;
// here I have some trouble
mdata[] mark[10]; //???
} markdata;
最佳答案
听起来好像您正在寻找 fixed
keyword .
此外,C# 中的 char
是 C++ 中 char
的两倍大小,因此您需要使用正确的对应类型 sbyte
。
第二个结构的定义方式如下:
struct markdata
{
UInt32 kupnr;
UInt16 lngd;
UInt16 bredd;
UInt16 tjocklek;
sbyte slagkraft;
byte antal;
fixed mdata mark[10];
}
如果您得到错误的值,请检查它们是否被字节交换。但是根据所使用的系统和数据格式规范,默认情况下字节顺序很可能是正确的。
关于c# - 将 C++ 结构转换为 C# 以用于 UDP 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33757724/