Luk*_*kas 4 c# string enum-flags
设备将限制开关的状态报告为一系列零(表示包含"010111110000"的字符串).这些开关的理想表示形式是这样的标志枚举:
[Flags]
public enum SwitchStatus
{
xMin,
xMax,
yMin,
yMax,
aMax,
bMax,
cMax,
unknown4,
unknown3,
unknown2,
unknown1,
unknown0
}
Run Code Online (Sandbox Code Playgroud)
是否可以将字符串表示转换为枚举?如果是这样,怎么样?
Leo*_*ngs 12
你可以使用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);
Run Code Online (Sandbox Code Playgroud)
首先,您必须将"二进制字符串"转换为int.
String binString = "010111110000";
int number = Integer.parseInt(binString, 2);
Run Code Online (Sandbox Code Playgroud)
您必须使用各自的数字声明您的枚举项:
[Flags]
public enum SwitchStatus
{
xMin = 1,
xMax = 2,
yMin = 4,
//...
unknown0 = 32 //or some other power of 2
}
Run Code Online (Sandbox Code Playgroud)
最后,映射.你从这个数字得到你的枚举:
SwitchStatus stat = (SwitchStatus)Enum.ToObject(typeof(SwitchStatus), number);
Run Code Online (Sandbox Code Playgroud)