C Union から C# への変換
C ライブラリを C# に変換しているときに、構造体内でキーワード 'union' に遭遇することがあります。この記事の目的は、'union' の C# への変換とその機能について説明することです。
C の 'union' を理解する
C では、'union' により複数のデータが有効になります。メンバーは同じメモリ位置を占有します。このメモリ空間は、メモリ要件が最も高いデータ型に従って割り当てられます。
'union' を C# に変換する
C# は、これを実現するメカニズムとして明示的なフィールド レイアウトを提供します。同様の機能。これにより、構造体内の特定のオフセットにデータ メンバーを配置し、同じメモリ空間を共有できるようになります。
コード例
次の C 構造体を考えてみましょう。 'union':
struct Foo { float bar; union { int killroy; float fubar; } as; };
この構造体を C# に変換するには、明示的なフィールドを使用できます。レイアウト:
[StructLayout(LayoutKind.Explicit)] public struct SampleUnion { [FieldOffset(0)] public float bar; [FieldOffset(4)] public int killroy; [FieldOffset(4)] public float fubar; }
説明
この C# 構造体:
重要なお知らせ
それ一度に使用できる共有フィールドは 1 つだけであることを覚えておくことが重要です。同じメモリ空間を共有する複数のフィールドにアクセスしようとすると、未定義の動作が発生する可能性があります。
以上が明示的なフィールド レイアウトを使用して C Union を C# に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。