使用C#中的位字段进行编组
发布时间:2020-12-16 01:51:15 所属栏目:百科 来源:网络整理
导读:是否可以将包含位字段的C风格结构编组到C#结构中,或者是否必须将其编组为基本类型然后执行位掩码? 例如.我想从这样的C风格结构编组: struct rgb16 { unsigned int R : 4; unsigned int G : 5; unsigned int B : 4;} 并将其编组到这样的事情上: [StructLay
是否可以将包含位字段的C风格结构编组到C#结构中,或者是否必须将其编组为基本类型然后执行位掩码?
例如.我想从这样的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,因为我喜欢不可变的结构,但原则上你也可以添加它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |