结构体定义c++和c#基本差不多 只是C#没有Union,下面是C++结构体定义 struct{ union{ 或写成如下C++联合体Union定义 union{ C#中没有联合体Union,可以通过手动控制结构体每个元素的位置来实现,这需要结合使用StructLayoutAttribute、LayoutKind以及FieldOffsetAttribute。使用时必须引用System.Runtime.InteropServices,下面用C#模拟C++中U的联合 using System; using System.Collections.Generic; using System.IO; using System.Text using System.Runtime.InteropServices namespace union { public unsafe struct A { public ushort ia; public fixed char iac[4]; public fixed short ias[4]; } public unsafe struct B { public uint ib; public fixed char iac[4]; public fixed short ias[4]; } public unsafe struct C { public fixed int ix[3]; } public struct D { public uint id; } //定义结构属性,结构类型为精确定位,大小12字节 [StructLayout(LayoutKind.Explicit, Size = 12)] public struct U { [FieldOffset(0)]//结构A定位在偏移0的位置 public A a; [FieldOffset(0)]//结构B定位在偏移0的位置 public B b; [FieldOffset(0)]//结构C定位在偏移0的位置 public C c; [FieldOffset(0)]//结构D定位在偏移0的位置 public D d; } } 也可以不定义U的Size,这时结构体U的Size为U内结构最大 ,默认情况下,C# 不支持指针算法。 不过,通过使用 unsafe 关键字,可以定义可使用指针的不安全上下文。不安全代码不一定是危险的,只是其安全性无法由 CLR 进行验证的代码。在某些情况下,通过移除数组界限检查,不安全代码可提高应用程序的性能。
|
|