我一直在为我的数据网络课程工作,他们要求我连接这样的标题:
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 至少不应该更多?
我希望我说清楚了,也许有人可以更好地向我解释一下。
谢谢