c# - 将 C++ 结构转换为 C# 以用于 UDP 通信

标签 c# c++ class struct udp

我正在编写一个程序,它将通过 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/

相关文章:

c# - 如何将 Razor View 模态属性值传递给 JavaScript 函数

c# - 如何在 ASP.NET MVC 4 中使用 Ninject 从 Web.config 绑定(bind)设置?

c# - 我可以阻止用户修改C#中的参数吗

c++ - 将 HICON/HCURSOR 复制到字节数组

using block 中的 C# 语句返回 null

c++ - 为什么我的 .cpp 文件没有被处理?

c++ - 如何在此OpenMP摘要示例中删除依赖项

C++类链接错误

使用或不使用的 PHP Getters/Setter

java - Java中如何使用其他类的函数