字节数组“联合”覆盖在c#StructLayout.Explicit中
我希望在ac#struct类型中有一种c风格的uion。
出于某种原因,每次我分配一个我定义的类型时,我都会得到一个exception。 这是我自己的类型。 基本的想法是我可以访问这个结构的“指针”。 不幸的是我得到了一个Exception TypeLoadException:
附加信息:无法从程序集“ManagedTarget,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”加载类型“ManagedTarget.FngPeriodeParameterType”,因为它包含偏移0处的对象字段,该字段未正确对齐或重叠对象字段。
怎么了?
[StructLayout(LayoutKind.Explicit, Size = 16)] unsafe internal struct FngPeriodeParameterType { [FieldOffset(0)] public Byte[] ByteArray; [FieldOffset(0)] public UInt32 Repetitions; [FieldOffset(4)] public Int16 Amplitude; [FieldOffset(6)] public Int16 Offset; [FieldOffset(8)] public Int16 Gain; [FieldOffset(10)] public UInt16 Selection; [FieldOffset(12)] public UInt32 Step; }
如果你的意图是ByteArray
是原始数据,它必须是一个fixed
缓冲区; 目前,它只是对堆上不相关的 byte[]
的引用 – 并且您不能重叠引用和uint
:
[FieldOffset(0)] public fixed byte ByteArray[16];
但是,使用它可能会很痛苦; 我通常添加辅助方法,如:
上述就是C#学习教程:字节数组“联合”覆盖在c#StructLayout.Explicit中分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public void ReadBytes(byte[] data) { fixed (byte* ptr = ByteArray) { for (int i = 0; i < 16; i++) data[i] = ptr[i]; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/955796.html