0

私はパケットを読んでいますが、必要なものを取得するためにパケットから最初の4バイトと最後のバイトを取り除く必要があります。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データが混在しています。

4

2 に答える 2

0

lineがcha​​r*の場合は、(line + 4)からコピーを開始できます。そして、lenより5バイト少ないコピーを行います。これにより、最後のバイトが破棄されます。

つまり、それをかなり明確にします(以前のmallocを想定すると、バッファーの最後にある程度の安全性が残ります)。

char *pFourBytesIn = (line + 4);
int adjustedLength = len - 5;
strncpy(msg, pFourBytesIn, adjustedLength);
msg[adjustedLength] = '\0';
于 2013-01-14T22:23:33.790 に答える
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*

于 2013-01-14T22:37:27.733 に答える