수치 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