我一直在为我的数据网络课程开发一个项目,他们让我连接这样的标题:
struct ip
{
unsigned long a;
unsigned long b;
unsigned int l;
} IP;
这是一个消息,它是一个char *让我们说“你好”。
所以,我使用这个方法将这两个连接在一个char *:
中memcpy(sendBuf, (void*)&sendHeader, sizeof(sendHeader));
memcpy(&sendBuf[sizeof(sendHeader)], readMessage, lengthMessage);
lengthMessage是消息+1的字符数,它是空终止字符。
所以,sendBuf的定义如下:
char sendBuf[BUFLEN + 1] // BUF_LEN = 128
然后我把这个char *放在这样定义的队列中:
concurrency::concurrent_queue<char*> IP_in_queue;
所以,我想检查信息是否正确,所以我只检查一切:
char* s;
IP_in_queue.try_pop(s);
numbytes = sizeof(s);
// Copy from buf to the header
memcpy( (void*)&readHeader, s, sizeof( IP_PACKET_HEADER_T));
// Copy message part
memcpy( sendedString, &s[sizeof(IP_PACKET_HEADER_T)], numbytes - sizeof(IP_PACKET_HEADER_T));
// Append \0 to the end
sendedString[numbytes - sizeof(IP_PACKET_HEADER_T)] = '\0';
所以,在我排队我的char *之前,我们知道sendBuf的大小是129,但是当我检查出队后它的字节数太多不同时,它的字节数是4的值,但即使在这样我得到的信息是正确的,所以我不明白,也许我错过了一些重要的事情,但变量numbytes不应该至少更多?
我希望我能说清楚,也许有人可以更好地解释我。
由于