C#팁

c언어의 Bit Field 를 class로 구현해 보았습니다. 미래소년 평점: 없음 조회: 174

C, C++로 제어나 펌웨어를 하다보면 bit field를 많이 사용하게 됩니다. 참 편리하게 사용할 수 있는 기능인데 아쉽게도 C#에서는 따로 이 기능이 없어서 간단하게 class 로 구현해 보았습니다. 


 class Bit_Field
 {
            private int m_iBitCount;
            private BitArray bitArray  ;
 
            public Bit_Field(int Count)
            {
                bitArray = new BitArray(Count);   // bitArray 에 bit 갯수를 설정 
                m_iBitCount = Count;
            }
 
            public byte Read_8Bits(int index)
            {
                int temp = (m_iBitCount / 8) + 1;
                if(index < 0 || index > temp)
                {
                    throw new IndexOutOfRangeException();
                }
                else
                {
                    byte[]  result = new byte[temp];
                    bitArray.CopyTo(result, 0);
                    return result[index];
                }
            }
 
            public short Read_16Bits(int index)
            {
                int temp = (m_iBitCount / 16) + 1;
                if (index < 0 || index > temp)
                {
                    throw new IndexOutOfRangeException();
                }
                else
                {
                    short[] result = new short[temp];
                    bitArray.CopyTo(result, 0);
                    return result[index];
                }
            }
 
            public bool this[int index]
            {
                get
                {
                    if (index >= 0 && index < m_iBitCount)
                    {
                        return bitArray[index] ;
                    }
                    else
                    {
                        throw new IndexOutOfRangeException();
                    }
                }
                set
                {
                    if (index >= 0 && index < m_iBitCount)
                    {
                        bitArray[index] = value;
                    }
                }
            }
}

사용방법 

Bit_Field data = new Bit_Field(10);  // 10개의 bits 를 가지는 비트필드 생성


data [0] = true;              // 원하는 위치의 비트를 set 시킨다. 
data [1] = true;
data [8] = true;      

byte read1 = data.Read_8Bits(0);    // 10개 비트중 하위 8비트에 해당하는 값을 읽어온다. 
byte read2 = data.Read_8Bits(1);    // 10개 비트중 상위 2비트에 해당하는 값을 읽어온다.  
short read3 = data.Read_16Bits(0); // 10개 비트 모두 읽어온다. 

bool read4 = data[3] ;             // 4 번째 비트의 상태값을 읽어온다. 

결과 
read1 = 0x03
read2 = 0x01
read3 = 259
read4 = false 




태그 : 비트필드 bitfield
작성자 정보
미래소년
Level 3
 [EXP.11/16]

메일:  비공개
글등록 +12 24 덧글등록 +3 3
자기소개
C++ 만 하다가 C# 에 발 담궈 보려고 합니다.
글 공유하기 |
  tweet facebook
2018-10-31 오후 7:43:49
나도한마디
글리스트
 ★현재글->   c언어의 Bit Field 를 class로 구현해 보았습니다.   미래소년
C#으로 시리얼통신을 해보자! 데이터의 수신과 분석을 분리편.[10] 파일첨부 아이프리드
C#에서 파일 입출력 한다고 ms사에서 나온 예제 코드 하는데 복호화 하는데 문제가 있습니[4]+2  두들기기
비동기 소켓 프로그래밍에 대해 질문이 있습니다... ㅠㅠ[1]  궁금해욥
딕션어리 vs 데이터 테이블(값이 자주 변경)[2]  레미콘
C#으로 시리얼통신을 해보자! 시리얼 통신의 원리부터 구현까지[23] 파일첨부 아이프리드
트리뷰 + - 버튼을 이미지로 바꿀 수 있나요 ?[1]+1  훈스훈스훈스
안녕하세요. PartialView에 대한 질문 드립니다.[3] 파일첨부 노찬이
두 가지 간단한 질문..[2]+1  븅멍뭉친구
OS X의 파일명의 한글 자모음이 분리되어 보이는 경우[4]  sa2랑
달력컨트롤 예시 입니다.[6] 파일첨부 방랑개죽