例如.我想从这样的C风格结构编组:
struct rgb16 { unsigned int R : 4; unsigned int G : 5; unsigned int B : 4;}
并将其编组到这样的事情上:
[StructLayout(LayoutKind.Sequential)]public struct Rgb16 { public byte R; public byte G; public byte B;}解决方法 C#中没有位字段.所以我会使用封装了小提琴的属性:
[StructLayout(LayoutKind.Sequential)]public struct Rgb16 { private Readonly UInt16 raw; public byte R{get{return (byte)((raw>>0)&0x1F);}} public byte G{get{return (byte)((raw>>5)&0x3F);}} public byte B{get{return (byte)((raw>>11)&0x1F);}} public Rgb16(byte r,byte g,byte b) { Contract.Requires(r<0x20); Contract.Requires(g<0x40); Contract.Requires(b<0x20); raw=r|g<<5|b<<11; }}
我避免添加setter,因为我喜欢不可变的结构,但原则上你也可以添加它们.
总结以上是内存溢出为你收集整理的使用C#中的位字段进行编组全部内容,希望文章能够帮你解决使用C#中的位字段进行编组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)