加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用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,因为我喜欢不可变的结构,但原则上你也可以添加它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读