이글은 예전 싸이월드 블로그에 작성한 글을 가져온 것입니다.


원문 : http://cy.cyworld.com/home/21147242/post/4C7DB9A7C7D5739A07C68401

작성일 : 2010.09.01 11:25


-----------------------------------------------------------------------

어떤 문자열이나 데이터에서 특정 비트열을 가지고 오고 싶을 때 사용하는
매크로 함수를 만들어 보았습니다.

PSI 데이터 parsing 하다가 만들게 되었네요.

buf 에 데이터를,
x, y 에 시작 비트열과 끝 비트열을 넣어주시면 됩니다.

맘대로 갖다 쓰셔도 되며 출처나 적어주심 감사하고~~
혹시나 버그 있을지 모르니 조심히... =_=;;

#define GETBIT_16(buf, x, y) (((unsigned short)(((0xFFFF>>((x) - 1)) \
                                                 ^ (0xFFFF>>(y))) \
                                                 &((unsigned short)(buf<<8) | ( *(&buf + 1))))) \
                                                 >>(16 - (y)))

#define GETBIT_8(buf, x, y) (((unsigned char)(((0xFF>>((x) - 1)) \
                                               ^ (0xFF>>(y)))&(unsigned char)(buf))) \
                                               >>(8 - (y)))

사용법.

unsigned char* szDATA ; // 데이터가 들어있는 변수.

11110011 01101100

위와같이 16개의 비트가 있을 때,

왼쪽에서 5번째부터 10번째까지 가져오고 싶다면~

GETBIT_16(*szDATA, 5, 10) ; // GETBIT_16(szDATA, 5, 10) 아님.

이렇게 사용하시면 됩니다.

+ Recent posts