解密二进制masque c#

时间:2016-05-03 06:36:31

标签: c# binary

我有一个二元面具类:

  public class Masque
{
    public bool MasquerAdresse { get; set; }

    public bool MasquerCpVille { get; set; }

    public bool MasquerTelephone { get; set; }

    public bool MasquerFax { get; set; }

    public bool MasquerEmail { get; set; }
    public bool MasquerNom { get; set; }
}

在数据库中我有一个二进制masque字段: 当我有值1 => MasquerAdresse是真的,2 => MasquerCpVille是真的,4 => MasquerTelephone是真的3 => MasquerAdresse和MasquerCpVille是真的等...,这是在c#中解码这个二进制面膜的最佳方法

1 个答案:

答案 0 :(得分:4)

正如其他人已在C#中指出的那样,我们通常会使用Flag EnumsEnum.HasFlag()来执行此操作。正如@Groo在他的评论中添加的那样,这也是更高的内存效率,因为每个bool占用整个字节。使用枚举它看起来像这样:

[Flags]
public enum Masque
{
    MasquerAdresse = 1,

    MasquerCpVille = 2,

    MasquerTelephone = 4,

    MasquerFax = 8,

    MasquerEmail = 16

    MasquerNom = 32
}

var masque = Masque.MasquerAdresse | Masque.MasquerTelephone;
var fromInt = (Masque) 5;
var trueResult = masque.HasFlag(Masque.MasquerTelephone);

如果您决定使用课程,它将如下所示:

public class Masque
{
    public bool MasquerAdresse { get; set; }
    public bool MasquerCpVille { get; set; }
    public bool MasquerTelephone { get; set; }
    public bool MasquerFax { get; set; }
    public bool MasquerEmail { get; set; }
    public bool MasquerNom { get; set; }

    public static Masque FromBits(int bits)
    {
        return new Masque
        {
            MasquerAdresse = (bits & 1) > 0,
            MasquerCpVille = (bits & 2) > 0,
            ...
        };
    }
}

使用二进制文件&,它将应用返回值或0的位掩码。您可以将结果与掩码(bits & 2) == 2进行比较,或者只检查> 0。< / p>