相当于c#中的typedef union



是否有类似的C代码或者在c#中有类似的行为?

typedef union RGBQUAD
{
DWORD rgb;
struct{
BYTE b;
BYTE g;
BYTE r;
BYTE unused;
};
};

我认为你能得到的最接近的是使用动态类型,你可以在一个变量中使用尽可能多的类型。当然,它比较慢,因为它使用反射,类/结构必须是公共的,但它确实接近

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/types/using-type-dynamic

public class Program
{
public struct COLORREF
{
public byte a,b,c;
}

public struct RGB
{
public byte a,b,c;
}

public static void Main()
{           
dynamic d = 10;
Console.WriteLine(d);
d = 10.5;
Console.WriteLine(d);

d = new COLORREF { a = 1, b = 2, c = 3};        
Console.WriteLine(d.a);

d = new RGB { a = 1, b = 2, c = 3};
Console.WriteLine(d.c);

}
}

一般情况下可以使用StructLayout属性

using System.Runtime.InteropServices
...
// If fields are in correct order
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct rgb {
public byte b;
public byte g;
public byte r;
public byte unused;
};

或FieldOffset属性为每个字段提供偏移量:

[StructLayout(LayoutKind.Explicit)]
struct rgb {
[FieldOffset(0)]
public byte b;
[FieldOffset(1)]
public byte g;
[FieldOffset(2)]
public byte r;
[FieldOffset(3)]
public byte unused;
};

在你的特殊情况下(ARGB颜色),你可能需要System.Drawing.Color结构体。

最新更新