블로그는 나의 힘!
[ Programing ]/C++2010. 1. 31. 07:17
void main()
{

/**********************************************************************
* ===== Char* 버퍼에 여러 종류의 데이터 처리 =====
*
* -> buffer에 여러 종류의 data를 input, output 할 수 있다.
* -> 기억해 둬야 할 것은 type의 data size이다.
* -> buffer에 input 계산해 건너 뛰고 이어서 input 해야 때문.
* -> 다시 output 할려면 buffer에 해당 길이 +해서 가져온다.(주소 이동)
*
* -> 버퍼 적재 방법 
* : 모든 타입은 마지막에 '/0' 즉, NULL이 반드시 기록되어 있다. 
* 그래서 각 type의 data들을 버퍼 안에 넣어 둬도 혼란이 없다.
* 하지만 그 데이터의 타입과 길이는 알고 있어야 한다.
* 길이는 input 할때 데이터가 덮어쓰지 않기 위해서고, 타입은 output시
* 넣어 줄 변수의 타입에서 필요 하기 때문이다.
***********************************************************************/

char   szBuffer[65536];             // Buffer 64K
int      nTotalSize     = 0;           // nTotal Length
int      nStageSize    = 0;           // nStage Length

int      nTotal           = 5564;      // Total Data
char   cStage          = 3;          // Stage Data
int      nReturnTotal  = 0;          // Output Total Data
char   cReturnStage = 0;          // Output Stage Data

// Buffer Initial
ZeroMemory( szBuffer, sizeof( char ) *65536 );
// Data Length
nTotalSize   = sizeof( int );
nStageSize  = sizeof( char );

// Buffer Input
memcpy( szBuffer, &nTotal, sizeof( int ) );
memcpy( szBuffer +nTotalSize, &cStage, sizeof( char ) );
 
printf( "Test <int> : %d \n", szBuffer );
// -> Test <int> : 1242476
printf( "Test <char*> : %s \n", szBuffer );
// -> Test <char*> : ?

// Buffer Output
memcpy( &nReturnTotal, szBuffer, nTotalSize );
memcpy( &cReturnStage, szBuffer +nTotalSize, nStageSize );
printf( "nReturnTotal : %d \n", nReturnTotal );
// -> nReturnTotal : 5564
printf( "cReturnStage : %d \n", cReturnStage );
// -> nReturnStage : 3

}
Posted by Mister_Q