이글은 예전 싸이월드 블로그에 작성한 글을 가져온 것입니다.
원문 : 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) 아님.
이렇게 사용하시면 됩니다.
'삽질미학 > C,C++' 카테고리의 다른 글
C 코드로 C++ 의 다형성 흉내내기 (0) | 2016.10.14 |
---|---|
map 컨테이너를 이용해 클래스 멤버함수의 콜백함수 등록과 호출하기 (0) | 2016.10.14 |
fseek(), feof() 함수 사용 시 주의 사항 (0) | 2016.10.13 |
[펌글] 텔넷 ssh-keygen으로 자동 로그인하기 (2) | 2016.06.19 |
string의 앞뒤 공백제거하기 (0) | 2016.06.19 |