c# - 'remap' 一个简单的二进制掩码的最佳方法?

标签 c# binary remap

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

1 = Sunday

2 = Saturday

4 = Friday

8 = Thursday

16 = Wednesday

32 = Tuesday

64 = Monday

So if you want a combination of Wednesday, Thursday and Friday you get 16 + 8 + 4 = 28

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

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

亲切的问候, 尼尔斯

最佳答案

你应该使用枚举:

[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 代码)。

如果您正在寻找其他东西,请更具体一些。

关于c# - 'remap' 一个简单的二进制掩码的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20828170/

相关文章:

c# - 为位于 PageFooter 部分的 TableObject 执行脚本时出错

c# - 如何以编程方式将文本添加到位图图像? WPF

java - IKVM 复杂自定义类型在重新映射到属性时出错!

mysql - 重新映射 MYSQL 中的行

c# - 错误 : Expression does not produce a value

c# - 应用程序在模拟器中运行良好,但在设备上抛出 NSUnknownKeyException 异常

java - 确定日期是否是二进制的

php - 使用Python插入MySQL二进制(8)字段

c - float 转换 - 二进制 -> 十进制

macos - OSX : Programmatically remap Caps Lock's functionality (as set via System Preferences)?