我正在为同一平台编写C ++ ZeroMQ客户端和服务器程序。我需要使用服务器上的参数来触发某些功能。参数是复杂的结构。我才刚开始尝试这个。我正在尝试填充结构并将其填充到char *缓冲区中,以查看是否按照结构顺序填充了字节。
但是当我尝试打印缓冲区时,它会打印垃圾。请告知可能出什么问题。这是执行此操作的优雅方法吗?我不能使用gRPC或Protobuffs,因为该消息包含复杂的结构。
struct employee {
uint8_t byt;
int arr[10] = {0};
int number;
uint32_t acct;
};
int main ()
{
// Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_PAIR);
struct employee *e = new employee;
e->byt = 0xff;
e->arr[0] = 15;
e->number = 25555;
e->acct = 45;
std::cout << "Connecting to hello world server…" << std::endl;
socket.connect ("tcp://localhost:5555");
char *temp = (char*)malloc(sizeof(employee));
memcpy(temp,e,sizeof(employee));
zmq::message_t request(sizeof(employee));
char *temp1 = temp;
for (int i = 0;i<sizeof(employee);i++) {
std::cout<<temp1[i]<<std::endl;
}
memcpy ((void *)request.data(),(void*)temp, sizeof(employee));
socket.send (request);
// Get the reply.
zmq::message_t reply;
socket.recv (&reply);
return 0;
}
答案 0 :(得分:0)
我想在这里分享两点。
结构员工* employeePtr = static_cast <结构员工*>(temp);
cout << employeePtr-> number;
...
当您尝试对对象进行反序列化时,可以 序列化占用连续的内存。否则,您将不得不以其他方式处理它们(例如,使用流)。此类情况的示例包括:
当您拥有指向某些已分配内存的指针,shared_ptr等时
容器类