使用C#中的位字段进行编组

使用C#中的位字段进行编组,第1张

概述是否可以将包含位字段的C风格结构编组到C#结构中,或者是否必须将其编组为基本类型然后执行位掩码? 例如.我想从这样的C风格结构编组: struct rgb16 { unsigned int R : 4; unsigned int G : 5; unsigned int B : 4;} 并将其编组到这样的事情上: [StructLayout(LayoutKind.Seque 是否可以将包含位字段的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,因为我喜欢不可变的结构,但原则上你也可以添加它们.

总结

以上是内存溢出为你收集整理的使用C#中的位字段进行编组全部内容,希望文章能够帮你解决使用C#中的位字段进行编组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存