본문 바로가기
개발이야기

[SECS-GEM] 아이템 타입 코드

by ictlab 2009. 9. 29.
secs-gem에서 사용하는 메시지 item type code 를 보면 아래와 같다.

[ 타입 코드 ]
 
enum SECS_MSG_ITEM_CODE
{
   MIC_LIST = 0x00,
   MIC_BINARY = 0x08,
   MIC_BOOL = 0x09,
   MIC_ASC = 0x10,
   MIC_JIS = 0x11,
   MIC_I8 = 0x18,
   MIC_I1 = 0x19,
   MIC_I2 = 0x1A,
   MIC_I4 = 0x1C,
   MIC_F8 = 0x20,
   MIC_F4 = 0x24,
   MIC_U8 = 0x28,
   MIC_U1 = 0x29,
   MIC_U2 = 0x2A,
   MIC_U4 = 0x2C,
};
     


각각의 타입에 대한 데이터 크기를 리턴하는 함수를 만들어야 하는데
귀찮아서 아래와 같이 대충 각각의 타입으로 swich .. case 문을 이용해서 만들었다.

[아이템 크기 리턴하는 함수 ]
 
int GetMsgItemSize(SECS_MSG_ITEM_CODE code )
{
   switch (code)
   {
   case MIC_LIST :   return 0;
   case MIC_BINARY : return 1;
   case MIC_BOOL :   return 1;
   case MIC_ASC :    return 1;
   case MIC_JIS :    return 1;
   case MIC_I8 :     return 8;
   case MIC_I1 :     return 1;
   case MIC_I2 :     return 2;
   case MIC_I4 :     return 4;
   case MIC_F8 :     return 8;
   case MIC_F4 :     return 4;
   case MIC_U8 :     return 8;
   case MIC_U1 :     return 1;
   case MIC_U2 :     return 2;
   case MIC_U4 :     return 4;
   default :
      return 0;
   }


}
     




하지만 아이템 type enum 값에서 볼 수 있듯이 각각의 타입이
enum으로 0부터 1씩 순차적으로 증가하는것이 아니고 특정 값을 가지고 있다.
비슷한 타입끼리 비슷한 범위로 모아져 있는데 무슨 의미인지는
16진수로 되어 있는것을 8진수로 바꾸어 보면 알 수 있다.

예를들어 정수형 4가지를 8진수로 바꾸어보면 다음과 같다.
I1 = 0x19 = 8진수 31
i2 = 0x1A = 8진수 32
i4 = 0x1C = 8진수 34
i8 = 0x18 = 8진수 30


SECS-GEM 원본 스펙 문서가 없기 때문에 대충 보고 추측하면서 진행하고 있다.
8진수에서 각각 두자리가 나오는데 8비트의 상위 숫자(3)는 타입을 표시하고
하위 숫자(1,2,4,0)은 데이터의 바이트 크기를 나타냄을 알수 있다.
8진수에서 8이란 숫자는 표시 할 수 없기 때문에 I8의 경우에는 하위 숫자를 0으로 표시하였다.

데이터 타입 상수를 만들때도 창제원리를 가지고 만들어 놓은것 같다.

하지만.. GetMsgItemSize() 함수를  만들때는 대충 swich case 문으로 만들었다는거..

이유는 간단하다.
8진수 연산을 한 다음에 하위 숫자를 이용하면 코드는 줄겠지만
다른 사람이 소스를 봤을때 8진수에 의미가 있다는 것까지 이해하고 볼 필요는 없기 때문이다.
쉽게쉽게 가자~~~



'개발이야기' 카테고리의 다른 글

LOG 매니저... 아~~ 왜 죽을까?!!!  (3) 2009.10.22
미팅 및 커뮤니케이션 방침  (0) 2009.10.16
C++Builder 2010 설치  (2) 2009.10.14
나이들어간다는것을 느낄때...  (1) 2009.10.14
커뮤니케이션에 관한 글  (0) 2009.10.13