所以,我熟悉GCC 0b00010010
,例如写一个二进制常量。我如何在.NET中做到这一点?我主要关注VB C#和C ++,因为我正在调试/修改这些语言的代码。
如果没有直接的方法可以做到这一点,是否有一条以后无法读取和修改的简短路线?
添加代码以说明问题的原因:
<FlagsAttribute( )> _
Enum ControlTypeEnum as Short
‘ 5 4 S 3 2 1 M L
None = 0 ‘0x 0 0 0 0 0 0 0 0
Lathe = 1
Mill = 2
P100 = 4 '*
P200 = 8 '*
P300 = 16
P300L = 17 '*
P300SLP = 49 '*
P300M = 18 '*
P300SMP = 50 '*
P400L = 65 '*
P400SLP = 97 '*
P400M = 66 '*
P400SMP = 98 '*
End Enum
'Values with asterisk are valid return values from function
答案 0 :(得分:2)
你可以在C#中最接近的是将它定义为一个字符串并使用Convert.ToInt(或等)
var flags = Convert.ToInt32( "00010010", 2 );
哪个功能齐全,但又冗长而且非常漂亮。你可能(如果你疯了)考虑扩展方法
public static class Extensions
{
public static Int32 toInt(this string me)
{
return Convert.ToInt32(me, 2);
}
}
(...)
var myflags = "00010010".toInt();
(...)
答案 1 :(得分:1)
我更喜欢以下内容:
None = 0 = 0
Lathe = 1 = 1
Mill = 2 = 1<<1
P100 = 4 = 1<<2
P200 = 8 = 1<<3
P300 = 16 = 1<<4
S = 32 = 1<<5
P400 = 64 = 1<<6
...然后,在稍后的代码中,使用P400 & Lathe & Mill
而不是额外的常量P400LM
。 (取决于你更喜欢什么,使用两个幂的十进制或bitshift表示。)
如果您已经拥有大量代码,具体取决于那些enum
并且不想重构,您可以使用
P400LM = 1<<6 | 1<<1 | 1<<0
这清楚地说明了这个标志是什么组合(在我看来比67
更清晰。)