抱歉,如果这是一个重复的问题,我尝试搜索,但找不到与我的问题相关的任何内容。
我有一个字节值,其中每个位(或一组位)都意味着什么。我有一个带有自定义属性的枚举来定义这些位,如下所示:
[Flags]
public enum Config4
{
[StringValue("Enable good-read beep")]
GoodReadBeep = 1 << 0,
[StringValue("Low beeper volume")]
LowBeep = 1 << 1,
[StringValue("Medium beeper volume")]
MediumBeep = 1 << 2,
[StringValue("Low beeper frequency")]
LowFrequency = 1 << 3,
[StringValue("Medium beeper frequency")]
MediumFrequency = 1 << 4,
[StringValue("Medium beeper duration")]
MediumDuration = 1 << 5,
[StringValue("Long beeper duration")]
LongDuration = 1 << 6,
[StringValue("Reserved")]
Reserved = 1 << 7
}
问题在于,除了这些单独的定义之外,还定义了成对(甚至是组)位。例如,(LowBeep | MediumBeep) = HighBeep
。
假设我有一个字节值 47,我想找到它的字符串表示形式。我目前实现的方法涉及查找字节中设置的位数,然后遍历这些位并从枚举中附加字符串值。类似于以下内容:
for (int i = 0; i < bitsSet.Count; i++)
{
answer += ((ConfigDataHolder.Config4)bitsSet[i]).GetStringValue() + ", ";
}
这在定义比特组时会产生问题。在上面提到的情况下, 47 将包含两者MediumBeep
,LowBeep
因此字符串表示应该HighBeep
代替MediumBeep
和LowBeep
单独。
考虑到可能存在与设置单个位完全不同的位组,是否有更有效的方法来获取字节中设置的每个位的字符串表示形式?
谢谢瑞诗