Преобразование строки в перечисление флагов в C # - PullRequest
4 голосов
/ 08 июля 2011

Устройство сообщает о состоянии своих концевых выключателей как последовательность из нулей (что означает строку, содержащую «010111110000»). Идеальным представлением этих переключателей было бы перечисление флагов, подобное этому:

[Flags]
public enum SwitchStatus
{
    xMin,
    xMax,
    yMin,
    yMax,

    aMax,
    bMax,
    cMax,
    unknown4,

    unknown3,
    unknown2,
    unknown1,
    unknown0
}

Можно ли преобразовать строковое представление в перечисление? Если да, то как?

Ответы [ 2 ]

12 голосов
/ 08 июля 2011

Вы можете использовать Convert.ToInt64(value, 2) или Convert.ToInt32(value, 2), это даст вам либо long, либо int, затем просто используйте

[Flags]
public enum SwitchStatus : int // or long
{
    xMin = 1,
    xMax = 1<<1,
    yMin = 1<<2,
    yMax = 1<<3,
    ...
}

SwitchStatus status = (SwitchStatus)Convert.ToInt32(value, 2);
6 голосов
/ 08 июля 2011

Сначала вы должны преобразовать вашу "двоичную строку" в int.

String binString = "010111110000";
int number = Integer.parseInt(binString, 2);

Вы должны объявить элементы перечисления с соответствующими номерами:

[Flags]
public enum SwitchStatus
{
    xMin = 1,
    xMax = 2,
    yMin = 4,
    //...
    unknown0 = 32 //or some other power of 2
}

Наконец,картированиеВы получаете свое перечисление от числа как это:

SwitchStatus stat = (SwitchStatus)Enum.ToObject(typeof(SwitchStatus), number);
...