2

因此,我熟悉 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
4

2 回答 2

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();
(...)
于 2013-09-12T19:07:17.667 回答
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。(取决于你更喜欢什么,使用二的幂的十进制或位移表示。)


如果您已经拥有大量取决于这些enums 的代码并且不想重构,则可以使用

P400LM = 1<<6 | 1<<1 | 1<<0

这清楚地表明了这个标志是什么的组合(67在我看来,比 更清楚。)

于 2013-09-12T19:15:33.363 回答