bitArray 를 사용한 Bit Field 기능 구현 - C#
Software/C#2022. 12. 29. 11:13
반응형
C 언어에는 공용체를 이용한 Bit Field 기능이 있어서 꽤 유용하게 사용했었는데 C#에는 Bit Field 기능이 따로 없어 C#에서 제공되는 bitArray 를 이용하여 Class로 구현해 보았습니다.
Bit Field 의 경우 입,출력 제어를 위한 I/O Board 제어용으로 요긴하게 사용이 될수 있습니다.
class Bit_Field
{
private uint byteCount = 0;
private BitArray bitArray ;
//---------------------------------------------------------------------------
public Bit_Field(uint ByteCount)
{
bitArray = new BitArray((int)ByteCount * 8);
byteCount = ByteCount;
}
//---------------------------------------------------------------------------
public byte Read(uint index)
{
if(index >= byteCount) throw new IndexOutOfRangeException();
else
{
byte[] result = new byte[byteCount];
bitArray.CopyTo(result, 0);
return result[index];
}
}
//---------------------------------------------------------------------------
public void Write(uint index, byte data)
{
if(index >= byteCount) throw new IndexOutOfRangeException();
else
{
int offset = (int)index * 8 ;
for(int loop=0 ; loop < 8 ; loop++)
{
bitArray[loop + offset] = (data & 0x01) == 1 ? true : false ;
data >>= 1;
}
}
}
//---------------------------------------------------------------------------
public void SetAll(bool value)
{
bitArray.SetAll(value) ;
}
//---------------------------------------------------------------------------
public bool this[int index]
{
set => bitArray[index] = value;
get => bitArray[index];
}
}
사용방법은 아래와 같이 하시면 됩니다.
Bit_Field bit_Field = new Bit_Field(2); // 2* 8 = 16bit 용 데이타
//----- 특정 비트에 값을 넣고 바이트값 불러올 경우 ------------
bit_Field[0] = true; // 0 비트 값을 설정
bit_Field[1] = true; // 1 비트 값을 설정
bit_Field[2] = true; // 2 비트 값을 설정
bit_Field[15] = true; // 15 비트 값을 설정
byte lower = bit_Field.Read(0); // 하위 8비트 리드
byte higher = bit_Field.Read(1); // 상위 8비트 리드
결과
lower = 0x07
higher = 0x80
//--------- 바이트값을 bit field 에 넣고 값을 비트로 확인할 경우
bit_Field.Write(0, 0x12) ;
bit_Field.Write(0, 0x34) ;
bool ch1 = bit_Field[0] ;
bool ch2 = bit_Field[1] ;
bool ch3 = bit_Field[2] ;
bool ch16 = bit_Field[15] ;
반응형
'Software > C#' 카테고리의 다른 글
C# Newton json 사용방법 (part - 2) (0) | 2023.01.27 |
---|---|
Contec 사의 GPIB 카드 (GP-IB(PCI)F) 제어를 위한 Class (C#) (0) | 2023.01.19 |
C# Newton json 사용방법 (part -1) (0) | 2023.01.10 |
C#에서 Excel 제어를 위한 클래스 구현 (0) | 2022.12.29 |
OpenCVSharp을 이용한 LD Bar 의 NFP 알고리즘 (0) | 2022.12.28 |
댓글()