【发布时间】:2015-03-22 03:58:49
【问题描述】:
msg->msgType = JOINREPLY;
memcpy((char *)(msg+1), &memberNode->addr.addr, sizeof(memberNode->addr.addr));
memcpy((char *)(msg+1) + 1 + sizeof(memberNode->addr.addr), &memberNode->memberList, sizeof(memberNode->memberList));
这是我想通过调用另一个函数从一个函数发送的消息,即send((char *)msg, msgsize);
msg的数据结构是
enum MsgTypes{
JOINREQ,
JOINREPLY,
DUMMYLASTMSGTYPE,
HEARTBEAT
};
typedef struct MessageHdr {
enum MsgTypes msgType;
}MessageHdr;
vector<MemberListEntry> memberList;是memberList的定义,可以看到memberList是一个MemberListEntry类型的向量,MemberListEntry有自己的数据。
int id;
short port;
long heartbeat;
long timestamp;
由于我将完整的 memberList 转换为 (char *),是否可以再次将 (char *) 转换为 memberList 或 MemberListEntry 类型并对其进行迭代??
MemberListEntry *ml;
ml=(MemberListEntry *)malloc(sizeof(MemberListEntry));
for(char *j=finalData; i < (int)string(finalData).length(); j = (char *)(j+ sizeof(MemberListEntry))){
ml= (MemberListEntry *)j;
i+=sizeof(MemberListEntry);
idR=ml->getid();
portR=ml->getport();
heartbeatR=ml->getheartbeat();
//Do some stuff
}
“finalData”是我在去掉 msgType 和我存储的地址后得到的数据,将指针指向我以 char 格式存储 memberList 的位置。
【问题讨论】: