如何在.NET 2003中编写十六进制和二进制常量

时间:2013-09-12 18:41:36

标签: c# c++ vb.net .net-1.1

所以,我熟悉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

2 个答案:

答案 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更清晰。)