c - 删除前4个字节的数据

时间:2013-01-14 22:21:10

标签: c offset packet-capture

我正在读取数据包,但是我需要从数据包中删除前四个字节和最后一个字节以获得我需要的内容,您将如何在C中执行此操作?

/* 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数据的混合。

2 个答案:

答案 0 :(得分:0)

如果line是char *,你可以简单地开始复制(第+4行),它似乎是。 并且复制比len少5个字节,这将丢弃最后一个字节。

即。使它非常明确(假设您之前的malloc,它在缓冲区的末尾留下了一些安全性)。

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

答案 1 :(得分:0)

您可以更改strncpy来源的地址:

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*