是否有类似的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结构体。