STX | HEADER | 본문 | CRC | ETX  이렇게 끝나는 아주 일반적인 패킷인데


우리 수석님은 이렇게 쓰라고 하시더군요.


메세지 헤더 구조체

struct HEADER

{

STX

int nFrameLen; 전체패킷길이

int nDataLen데이터길이

char *cData     //본문 포인터 

}

이렇게 해놓고 Data 에 New  데이터 길이만큼 메모리 선언해서 씀


저는 저렇게 하면 매번 cData   에 대해 다시 메모리 할당 해줘야되고 다른쓰레드로 패킷을 넘기거나 할때에도 매번 cData   값을 별도로 memcopy 해줘야하고

잘못해서 cData   에 무표포인터 값이라도 들어가면 골아프고 하니 저는 


struct HEADER

{

int nFrameLen; 전체패킷길이

int nDataLen데이터길이

// char *Data     //본문 포인터   <-- 이걸 빼고

}


패킷 전체길이만큼 바이트 로 메모리 선언하고 앞에껀 (HEADER*) 로 캐스팅 해서 헤더값 빼서쓸거있으면 쓰고

뒤에오는 데이터는 HEADER 길이만큼 포인터를 이동시키면 바로 Data 포인터를 참고가능하니 저렇게 쓰는게 낫다고 했더니


그게 뭔차이냐고 따지는데... 아 골아프네요.


(HEADER*) 로 받은 통신 패킷 캐스팅 해도 저 위에 수석님 스타일로 하면 cData 에 포인터값 이아닌 본문값이 들어가서 거슬림 


여러분들은 통신패킷 짤때 어떻게 하시나요.

제 방식이 좀더 일반적인듯한데