반응형

일반 프로그래밍에서 별 사용처가 없을 것 같은데
비트별 값을 다루는 경우에는 도움이 될 것 같아서 퍼왔습니다. ^^;;

브루 쪽에서는 활용하던데... 모바일 C에서는 확인 못해봤네요.
(모바일 C의 프리프로세서를 제대로 만들었다면 가능해야 합니다.)


<펌> 글. 김성식

------------------------------------
GPG 3 책 보고 따라해봤습니다.


#ifndef BINARYUTIL_H_
#define BINARYUTIL_H_

#define HEX_DIGIT_0000 0
#define HEX_DIGIT_0001 1
#define HEX_DIGIT_0010 2
#define HEX_DIGIT_0011 3
#define HEX_DIGIT_0100 4
#define HEX_DIGIT_0101 5
#define HEX_DIGIT_0110 6
#define HEX_DIGIT_0111 7
#define HEX_DIGIT_1000 8
#define HEX_DIGIT_1001 9
#define HEX_DIGIT_1010 A
#define HEX_DIGIT_1011 B
#define HEX_DIGIT_1100 C
#define HEX_DIGIT_1101 D
#define HEX_DIGIT_1110 E
#define HEX_DIGIT_1111 F

#define HEX_DIGIT_0 0
#define HEX_DIGIT_1 1
#define HEX_DIGIT_10 2
#define HEX_DIGIT_11 3
#define HEX_DIGIT_100 4
#define HEX_DIGIT_101 5
#define HEX_DIGIT_110 6
#define HEX_DIGIT_111 7


#define HEX_DIGIT(binary_num) HEX_DIGIT_ ## binary_num

#define BINARY1H(a) (0x ## a)
#define BINARY1I(a) BINARY1H(a)
#define BINARY1(a) BINARY1I(HEX_DIGIT(a))

#define BINARY2H(a, b) (0x ## a ## b)
#define BINARY2I(a, b) BINARY2H(a, b)
#define BINARY2(a, b) BINARY2I(HEX_DIGIT(a), HEX_DIGIT(b))
#define BINARY_TO_CHAR(a, b) BINARY2(a, b)

#define BINARY4H(a, b, c, d) (0x ## a ## b ## c ## d)
#define BINARY4I(a, b, c, d) BINARY4H(a, b, c, d)
#define BINARY4(a, b, c, d) BINARY4I(HEX_DIGIT(a), HEX_DIGIT(b), HEX_DIGIT(c), HEX_DIGIT(d))
#define BINARY_TO_SHORT(a, b, c, d) BINARY4(a, b, c, d)

#define BINARY8H(a,b,c,d,e,f,g,h) (0x ## a ## b ## c ## d ## e ## f ## g ## h)
#define BINARY8I(a,b,c,d,e,f,g,h) BINARY8H(a,b,c,d,e,f,g,h)
#define BINARY8(a,b,c,d,e,f,g,h) BINARY8I(HEX_DIGIT(a), HEX_DIGIT(b), HEX_DIGIT(c), HEX_DIGIT(d), \
HEX_DIGIT(e), HEX_DIGIT(f), HEX_DIGIT(g), HEX_DIGIT(h))
#define BINARY_TO_LONG(a,b,c,d,e,f,g,h) BINARY8(a, b, c, d, e, f, g, h)

#endif //BINARYUTIL_H_

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

위 내용은 첨부 파일 내용이구요.
사용하실땐
char a = BINARY_TO_CHAR(0001,0000); // a에 0x10 이 들어갑니다.
short b = BINARY_TO_SHORT(0000,0000,0000,0001); // b에 0x0001 이 들어갑니다.
int c = BINARY_TO_LONG(0000,0100,1101,1111,0010,1101,1111,0010); // c에 지정한 이진수 4byte 값 들어갑니다.

매크로로 정의 되어 있는 것이기 때문에 런타임시 시간 더 잡아 먹는것 전혀 없으니 속도 문제는 전혀 걱정 안해도 되겠네요.

현재 프로젝트가 비트별로 값 추출해서 써야 하는거라서 연구중이었는데, 마침 좋은 책 참조하게 되어서 공유합니다.

<이상>

반응형

+ Recent posts