對不起,如果這是一個重複的問題,我試圖搜索,但我找不到任何與我的問題有關的東西。C#字節查找字符串表示的所有位設置/未設置
我有一個字節值,其中每個位(或一組位)意味着什麼。我有一個自定義屬性的枚舉定義這些位,像這樣:
[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
。
是否有一種更有效的方法來獲取字節中每個位集的字符串表示形式,考慮到可能有一些比特組意味着完全不同於設置了各個比特組的比特組?
感謝 仙人
當然,它的'(LowBeep | MediumBeep)= HighBeep'?否則'HighBeep'將爲零。 – harold