2013-01-14 6 views
0

패킷을 읽었습니다. 패킷에서 첫 번째 4 바이트와 마지막 바이트를 제거해야합니다. C에서이 작업을 수행하려면 어떻게해야합니까?c - 데이터의 첫 번째 4 바이트를 제거합니다.

/* Build an input buffer of the incoming message. */ 
    while ((len=read(clntSocket, line, MAXBUF)) != 0) 
    { 
      msg = (char *)malloc(len + 1); 
      memset(msg, 0, len+1); 
      strncpy(msg, line, len); 
     } 
    } 

들어오는 데이터는 char 및 int 데이터의 혼합입니다.

+0

처음 네 바이트에는 중요한 정보가 실제로 있습니까? – Christoffer

답변

0

당신은 strncpy 소스의 주소를 변경할 수 있습니다 나는 그 선이 char*입니다 가정.

0

line이 char * 인 경우 간단히 복사 할 수 있습니다 (line + 4). 그리고 len보다 5 바이트 작게 복사하면 마지막 바이트가 버려집니다.

e.e. (버퍼의 끝에 약간의 안전성을 남겨둔 이전의 malloc을 가정 할 때) 꽤 명료하게 만든다.

while ((len=read(clntSocket, line, MAXBUF)) != 0) 
{ 
     msg = (char *)calloc(len -3, 1); // calloc instead of malloc + memset 
     strncpy(msg, line+4, len); 
    } 
} 

PS :

char *pFourBytesIn = (line + 4); 
int adjustedLength = len - 5; 
strncpy(msg, pFourBytesIn, adjustedLength); 
msg[adjustedLength] = '\0'; 
관련 문제