Итак, я знаком с 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
Я бы предпочел следующее:
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
, по-моему.)
Самое близкое, что вы могли бы сделать в 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();
(...)