C# 在C中将字符串转换为标志枚举#

C# 在C中将字符串转换为标志枚举#,c#,string,enum-flags,C#,String,Enum Flags,设备将其限位开关的状态报告为一系列的1和0(表示包含“010111110000”的字符串)。这些开关的理想表示形式是如下所示的标志枚举: [Flags] public enum SwitchStatus { xMin, xMax, yMin, yMax, aMax, bMax, cMax, unknown4, unknown3, unknown2, unknown1, unknown0 } Sw

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

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

    aMax,
    bMax,
    cMax,
    unknown4,

    unknown3,
    unknown2,
    unknown1,
    unknown0
}
SwitchStatus stat = (SwitchStatus)Enum.ToObject(typeof(SwitchStatus), number);

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

首先,您必须将“二进制字符串”转换为int

您必须使用各自的编号声明枚举项:

[Flags]
public enum SwitchStatus
{
    xMin = 1,
    xMax = 2,
    yMin = 4,
    //...
    unknown0 = 32 //or some other power of 2
}
最后,对映射进行了研究。您可以从以下数字中获取枚举:

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

    aMax,
    bMax,
    cMax,
    unknown4,

    unknown3,
    unknown2,
    unknown1,
    unknown0
}
SwitchStatus stat = (SwitchStatus)Enum.ToObject(typeof(SwitchStatus), number);

您可以使用
Convert.ToInt64(值,2)
Convert.ToInt32(值,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);
[标志]
公共枚举开关状态:int//或long
{
xMin=1,

xMax=1标志值将是来自二进制字符串的任何值,但由1和0组成的字符串是所有开关。12位数字,12个枚举名称。每个枚举值应为单个位的值。
0x001
0x800
开关状态
标志将不会像您拥有的那样连续正确编号-您也可以删除
”[标志]
attribute。由于答案的实用性,我仍然给出+1。此外,你不能使用base作为变量名。它是保留的。唉……我想现在人们想要完全可编译的代码……这是一个问答网站,不是我的生产环境。人们应该找到最终修复伪代码的方法。无论如何,修复了它。下载ed因为那只是卑鄙。。。