Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

Code Habit

[c++] bit 읽기 - BitReader 본문

카테고리 없음

[c++] bit 읽기 - BitReader

코드베어 2023. 4. 22. 11:59

최근 직무가 Client 개발에서 Server로 변경 되었다. Codec 관련 업무를 맏고 있는데 Metadata나 헤더 파싱하는데 bit 단위로 접근해야 하는 경우가 많더라.. 하여 간단하게 Bit값 읽어오는 함수 두개를 만들어 보았다.

 

- 1Byte의 데이터를 입력 받아 index 번째 있는 bit 값을 가져오는 함수이다 ( 0 or 1 )

UINT8 GetBit(UINT8 nData, UINT nIndex)
{
	if (8 <= nIndex) {
		return 0;
	}

	UINT8 nOut = nData;
	
	nOut <<= nIndex;
	nOut >>= 7;

	return nOut;
}

 

- 1Byte의 데이터에서 index번째부터 count만큼 읽어오는 함수이다.

UINT8 GetBits(UINT8 nData, UINT nIndex, UINT nCount)
{
	int nEnd = nIndex + nCount;
	if (nEnd > 8) {
		return 0;
	}

	int nOut = 0;
	for (int i = nIndex; i < nEnd; i++)
	{
		nOut = (nOut << 1) | GetBit(nData, i);
	}

	return nOut;
}

위의 GetBit 함수를 사용한다.