【问题标题】:Best way to 'remap' a simple binary mask?“重新映射”简单二进制掩码的最佳方法?
【发布时间】:2014-01-16 16:01:15
【问题描述】:

我得到了一个非常简单的二进制掩码。

1 = 星期日

2 = 星期六

4 = 星期五

8 = 星期四

16 = 星期三

32 = 星期二

64 = 星期一

因此,如果您想要周三、周四和周五的组合,您会得到 16 + 8 + 4 = 28

现在沿着我的代码,我只有映射的二进制值。将此值(28)“重新映射”到周三、周四和周五的最佳方式是什么?

希望得到一些关于如何做到这一点的意见:)。

亲切的问候, 尼尔斯

【问题讨论】:

标签: c# binary remap


【解决方案1】:

你应该使用枚举:

[Flags]
public enum WeekDays
{
    Sunday = 1,
    Saturday = 2,
    Friday = 4,
    Thursday = 8,
    Wednesday = 16,
    Tuesday = 32,
    Monday = 64
}

一个简单的显式转换将完成您感兴趣的“重新映射”:

WeekDays days = (WeekDays) 28;

您可以轻松使用正常的按位运算:

if ((days & WeekDays.Friday) != 0)
{
    // Yes, the mask included Friday
}

你可以循环执行:

foreach (WeekDays day in Enum.GetValues(typeof(WeekDays))
{
    if ((days & day) != 0)
    {
        Console.WriteLine("Got {0}", day);
    }
}

即使只使用Console.WriteLine(days) 也会给你一个逗号分隔的表示。

您还可以在我的Unconstrained Melody 库中发现实用方法很有用(尤其是Flags 代码)。

如果您正在寻找其他内容,请更具体。

【讨论】:

  • 您能否提供一些示例代码,说明如何使用这些实用程序方法来生成 OP 正在寻找的答案?这会特别有帮助。
  • @GeorgeStocker:说实话,OP 确实想要什么并不完全清楚 - 一个变量?三?
  • 另外,ToString() 上的 Flags enum 可以生成“星期三、星期四、星期五”。
  • @CoryNelson: 是的 - “即使只使用 Console.WriteLine(days) 也会给你一个逗号分隔的表示。” (虽然我不知道顺序是什么。)
  • @Niels:那么看看我在答案末尾附近给出的循环。
猜你喜欢
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
相关资源
最近更新 更多