4

设备将其限位开关的状态报告为一系列 1 和 0(表示包含“010111110000”的字符串)。这些开关的理想表示是这样的标志枚举:

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

    aMax,
    bMax,
    cMax,
    unknown4,

    unknown3,
    unknown2,
    unknown1,
    unknown0
}

是否可以将字符串表示形式转换为枚举?如果是这样,怎么做?

4

2 回答 2

13

您可以使用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);
于 2011-07-08T13:32:45.393 回答
8

首先,您必须将“二进制字符串”转换为 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);
于 2011-07-08T13:28:00.033 回答