我正在编写一个接收复杂数据结构的 UDP 客户端。我确实有 C++ 中的结构,但我的程序是 C#
Bitfiels 和联合有很多不同的结构。
有什么方法可以让我不必手动转换结构?
还有一种简单的方法可以在 C# 中实现位域和联合吗?
现在我正在为 Bitfields 使用属性,但这是一项艰巨的工作,极有可能出错。
我提供了一个我现在正在做的简化示例,大约有 50 个结构,每个结构有 100 行代码。
示例 C++:
typedef struct Message_s
{
unsigned char var : 2;
unsigned char var2 : 6;
union
{
struct
{
unsigned char sVar;
unsigned char sVar2;
}
char arr[32];
}
}Message_t;
示例 C#:
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
struct Message_s
{
private byte Field1
public byte var
{
get
{
return (byte)(Field1 & 0x03);
}
set
{
Field1 = (byte)((Field1 & ~0x03) | value);
}
public byte var2
{
get
{
return (byte)(Field1 & 0xFC);
}
set
{
Field1 = (byte)((Field1 & 0x03) | value<<2);
}
}
//unions may be possible with properties...
}