C#을 다루면서 비트를 다룰 때 생각보다 많이 사용하게되는 BitArray
입니다.
바이트 배열을 넣어서 사용하기도 하고 비트의 개수를 넣어서 사용하기도 합니다.
BitArray 생성자
using System.Collections; // BitArray를 사용하기 위함
// length 만큼의 길이를 가진 비트배열을 만듬 (모든 비트는 0)
public BitArray(int length);
// length 만큼의 길이를 가진 비트배열을 만들고 기본값을 defaultValue로 설정
public BitArray(int length, bool defaultValue)
// 바이트 배열을 비트배열로 만듬
// 예) bytes = byte[2] -> BitArray를 16칸 자리를 만듬
// (BitArray[0~7] = bytes[0], BitArray[8~15] = bytes[1])
public BitArray(byte[] bytes)
// Boolean 값을 토대로 비트배열을 만듬
// 예) { false, false, true, false }을 넣으면 4비트짜리 배열을 만듬 (0100)
public unsafe BitArray(bool[] values)
BitArray는 위의 생성자를 주로 사용하게 됩니다.
위의 생성자에서 보면 BitArray는 비트 표현을 boolean으로 하게 됩니다.
0은 false, 1은 true로 표현합니다.
BitArray 메소드 - Set(Int32, Boolean)
// index 위치의 비트를 value로 설정
public void Set(int index, bool value)
// 예시
BitArray bitArray = new BitArray(8); // 00000000 = 0
bitArray.Set(2, true); // 00000100 = 4
BitArray 메소드 - Get(Int32)
// index 위치의 비트 값을 bool값으로 반환
public bool Get(int index)
// 예시
BitArray bitArray1 = new BitArray(new bool[] {true, false, true, false}); // 0101 = 5
bool bBit3 = bitArray1.Get(2); // true
BitArray 메소드 - And(BitArray)
// value와 And 연산을 수행한 결과를 반환
// 단, value와 BitArray 길이는 같아야함(같지 않으면 ArgumentException)
public unsafe BitArray And(BitArray value)
// 예시
BitArray bitArray1 = new BitArray(new byte[] {21}); // 00010101
BitArray bitArray2 = new BitArray(8, true); // 11111111
BitArray bitArrayAND = bitArray1.And(bitArray2); // 00010101
BitArray 메소드 - Or(BitArray)
// value와 Or 연산을 수행한 결과를 반환
// 단, value와 BitArray 길이는 같아야함(같지 않으면 ArgumentException)
public unsafe BitArray Or(BitArray value)
// 예시
BitArray bitArray1 = new BitArray(new byte[] {21}); // 00010101
BitArray bitArray2 = new BitArray(8, true); // 11111111
BitArray bitArrayOR = bitArray1.Or(bitArray2); // 11111111
BitArray 메소드 - Xor(BitArray)
// value와 XOR 연산을 수행한 결과를 반환
// 단, value와 BitArray 길이는 같아야함(같지 않으면 ArgumentException)
public unsafe BitArray Xor(BitArray value)
// 예시
BitArray bitArray1 = new BitArray(new byte[] {21}); // 00010101
BitArray bitArray2 = new BitArray(8, true); // 11111111
BitArray bitArrayXOR = bitArray1.Xor(bitArray2); // 11101010
BitArray 메소드 - Not()
// 반전(NOT)을 수행한 결과를 반환
public unsafe BitArray Not()
// 예시
BitArray bitArray = new BitArray(new byte[] {21}); // 00010101
BitArray bitArrayNOT = bitArray.Not(); // 11101010
BitArray 메소드 - RightShift(Int32)
// 오른쪽으로 count만큼 시프트한 결과를 반환
public BitArray RightShift(int count)
// 예시
BitArray bitArray = new BitArray(new byte[] {21}); // 00010101
BitArray bitArrayRS = bitArray.RightShift(4); // 00000001
BitArray 메소드 - LeftShift(Int32)
// 왼쪽으로 count만큼 시프트한 결과를 반환
public BitArray LeftShift(int count)
// 예시
BitArray bitArray = new BitArray(new byte[] {21}); // 00010101
BitArray bitArrayLS = bitArray.LeftShift(4); // 01010000
BitArray 메소드 - CopyTo(Array, Int32)
// BitArray의 값을 array의 index 위치에 복사
// BitArray의 값을 byte 배열로 변환하는데 많이 사용함
public unsafe void CopyTo(Array array, int index)
// 예시
BitArray bitArray = new BitArray(new byte[] {21}); // 00010101
BitArray bitArrayLS = bitArray.LeftShift(4); // 01010000
int nByteArr = bitArrayLS.Count / 8 + bitArrayLS.Count % 8; // 비트 길이 계산
byte[] bytes = new byte[nByteArr]; // bytes = new byte[1];
bitArrayLS.CopyTo(bytes, 0); // bytes[0] = 80
BitArray 속성 - Count와 Length
BitArray
에는 Count
와 Length
라는 속성이 있는데 둘은 같은 BitArray의 길이라는 값을 반환
합니다.
대신 Count는 Get
만 할 수 있고 Length는 Get, Set
둘 다 할 수 있습니다.
'Study > C#, Winform' 카테고리의 다른 글
[C#, Winform] Cross Thread(UI Thread) 처리, InvokeRequired (0) | 2024.05.26 |
---|---|
[C#] 바이트 배열 다루기 : BitConverter (0) | 2023.08.16 |
[C# Winform] PropertyGrid 에서 DisplayName 우선순위 (0) | 2022.12.26 |
[C#] 배열 정렬 기능 (Sort) (0) | 2022.12.10 |
[C# Winform] DataGridView Column Header Drag (컬럼 헤더 드래그) (0) | 2022.10.24 |