C# 숫자에 2진수 값을 코드에 넣는 방법 - Binary literals , BitArray
1. C# 숫자에 2진수 값을 코드에 넣는 방법 - Binary literals
코드에서 Flag 같은 enum이나 비트를 다룰 때 값을 직관적으로 보게 하면 편할 때가 있다.
다음과 같이 2진수 값을 변수에 할당 할 수 있다.
byte num = 1;
byte num = 0b0000_0001;
위와 같이 숫자에 0b를 사용 하면 바이너리를 표현 할 수 있다.
여기서 언더바( _ )는 있어도 없어도 상관 없다.
다른 예)
[Flags]
enum Flag
{
None = 0,
Flag01 = 1,
Flag02 = 1 << 1,
Flag03 = 1 << 2,
Flag04 = 1 << 3,
}
[Flags]
enum Flag
{
None = 0,
Flag01 = 0b00000001,
Flag02 = 0b00000010,
Flag03 = 0b00000100,
Flag04 = 0b00001000,
}
[Flags]
enum Flag
{
None = 0,
Flag01 = 0x01,
Flag02 = 0x02,
Flag03 = 0x04,
Flag04 = 0x08,
}
2. 2진수 바이너리 숫자에서 문자열로 변환
2진수 문자열에서 숫자로 변환
byte num = Convert.ToInt32("00000001", 2);
Convert.ToString(num, 2).PadLeft(8, '0');
PadLeft()는 스트링을 8자리로 만들고 빈자리에 0을 채워 줌.
3. Bit 플래그 값 비교
num 변수에 원하는 플래그 값이 있는지 체크 하기 위해서
(num >> 2) & 0x01) == 0x01
와 같은 shift 연산자를 이용 하던지
(num & 0x04) == 0x04
(num & Flag.Flag03 ) == Flag.Flag03
직접 값을 비교 하던지 할 수 있다.
다른 방법으론
using System.Linq;
BitArray ba = new BitArray( BitConverter.GetBytes(num).ToArray());
if( ba[5] == true)
{
}
위와 같이 BitArray를 사용 할 수도 있는데
이 클래스를 사용 하면 인텍스로 해당 값을 비교 할 수 있다.
단, 주의 할 점은 배열 인덱스 순서가 코드상에서 표기 하는
0000_0001 의 순서가 아닌
메모리상에 저장된 순서로 값을 확인 할 수 있다.
( 1 0 0 0 0 0 0 0 )
(BitConverter.IsLittleEndian == true 일때)
즉, 여기서 ba[0] == 0 이 아니고 ba[0] == 1 이 된다.
C# 2진수 처리, 바이너리 처리