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진수 처리, 바이너리 처리
'Programming' 카테고리의 다른 글
예제로 배우는 C# 프로그래밍 - 링크 (0) | 2021.03.05 |
---|---|
C# 문자열 보간(String Interpolation)을 사용 하니 엄청 편하네. 문자열 서식지정자 말고 문자열 보간 사용 하자. (0) | 2021.03.05 |
C# 돈 표시 및 콤마 표시 하기 - 다국어 (0) | 2021.03.03 |
c# DateTime ToString에서 시간을 24시간 포맷으로 출력 그리고 사용자 지정 날짜 및 시간 지정 포맷 문자열 (0) | 2021.01.25 |
C# 생성자 오버라이딩 , this, base (0) | 2020.11.27 |