'Open Source'에 해당되는 글 38건

  1. 2011.04.13 구조체 포인터를 이용한 RcvData 옷입히기!!
  2. 2011.04.13 수치 Data 순서 리버스!! (Data 꼬아주기)
  3. 2010.04.03 g++ makefile sample !!

구조체 포인터를 이용한 RcvData 옷입히기!!

|
Data에 구조가 정형화 되어 있을 경우 해당 Data 구조체를 정의하고 문자열에 해당 구조체형태의 옷을 입히면 사용하기가 편리하다!

struct _STATDATA{
    char    item1[4];
    char    item2[10];
    char    item3[4];
    char    item4[5];
    char    item5[2];
};

int RcvModule(char *RcvData){
    struct _STATDATA *StatData;
    StatData = (struct _STATDATA *)RcvData
    StatData->item1;
    StatData->item2;
    StatData->item3;
    StatData->item4;
    StatData->item5;
}


포인터를 이용해 해당 구조체 Type으로 옷을 입힌다음 구조체 포인터 연산자를 이용하여 사용하면 된다!!
And

수치 Data 순서 리버스!! (Data 꼬아주기)

|
Unix System에서 Window System으로 소켓 통신을 할 경우 Data의 형태가 맞지 않아 원하는 Data가 나오지 않는 경우가 있다. String 값을 경우 제대로 나오지만 수치형 Data일 경우 System Format이 맞지 않아 Data의 형식이 좌, 우가 뒤바뀐 경우 이다. 이럴때 Socket Send전에 Data를 좌 우 배열을 바꿔 전송하면 제대로 나오는 경우가 있다! 이렬 때를 위한 Module을 간단하게 제작 해 보았다.

#define EConByte(A) ConByte((char *)&A, sizeof(A))
#define EConByteA(A) ConByteA((char *)&A, sizeof(A) / sizeof(A[0]), sizeof(A[0]))

void ConByte(char *OrginData, int TypeSize)
{
    char    TempData;

    typedef union
    {
        char Data[8];
    }Byte;

    Byte *ByteData;
    ByteData = (Byte *)OrginData;

    int ChangeLoop = 0;
    ChangeLoop = (TypeSize / 2);
    if (ChangeLoop == 0)
    {
        ChangeLoop = 1;
    }
    for (int i = 0; i < ChangeLoop ; i++ )
    {
        TempData = ByteData->Data[i];
        ByteData->Data[i] = ByteData->Data[(TypeSize-i) - 1];
        ByteData->Data[(TypeSize-i) - 1] = TempData;
    }
}

void ConByteA(char *OrginData, int ArrayLen, int TypeSize)
{
    typedef union
    {
        char Data[8];
    }Byte;

    char    TempData;

    for (int i = 0; i < ArrayLen ; i++)
    {
        Byte *ByteData;

        ByteData = (Byte *)(OrginData + (TypeSize * i));

        int ChangeLoop = 0;

        ChangeLoop = (TypeSize / 2);
        if (ChangeLoop == 0)
        {
            ChangeLoop = 1;
        }

        for (int j = 0; j < ChangeLoop ; j++ )
        {
            TempData = ByteData->Data[j];
            ByteData->Data[j] = ByteData->Data[(TypeSize-j) - 1];
            ByteData->Data[(TypeSize-j) - 1] = TempData;
        }
    }
}


Conbyte함수는 수치형 Data를 변경 할때 사용하고
ConbyteA함수는 수치형 Data배열 전체를 변경할 때 사용하고자 만들었다.

사용 편의를 위해 define을 이용하여 EConByte와 EConByteA를 정의 하여 같은 형태의 사용 할 수 있도록 정의 하였다.

실제 사용은 EConByte(변수) 또는 EConByteA(변수) 형태로 사용하면 된다!!
And

g++ makefile sample !!

|
CPP = g++
CFLAGS = -g -Wall -D_REENTRANT
INC = -I.

SRCS_CPP = Test.cpp
OBJS = $(SRCS_CPP:.cpp=.o)

all: Test

Test: $(OBJS)
    $(CPP) -o $@ $(OBJS)
.cpp.o:
    $(CPP) -c -o $(OBJS) $(CFLAGS) $(INC) $<
clean:
    rm -rf $(OBJS) core

내용은 알아서 해석!! ㅋㅋ
And
prev | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ··· | 13 | next