Как написать шестнадцатеричные и двоичные константы в .NET 2003

Итак, я знаком с 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

Решение

Я бы предпочел следующее:

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, (в зависимости от того, что вам больше нравится, используйте десятичное или битовое представление степеней двух).


Если у вас уже есть огромный пакет кода в зависимости от тех, enumи не хотите рефакторинга, вы можете использовать

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

что дает понять, что этот флаг представляет собой комбинацию (гораздо яснее, чем 67, по-моему.)

1

Другие решения

Самое близкое, что вы могли бы сделать в 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();
(...)
2