gpt4 book ai didi

c# - 在 C# 中使用位字段编码结构

转载 作者:行者123 更新时间:2023-11-30 13:49:30 24 4
gpt4 key购买 nike

是否可以将包含位域的 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# 中使用位字段编码结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9311478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com