在客户端和服务器之间序列化复杂的C++结构
serialize complex C++ structures between client and server
我正在为同一平台编写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;
}
我想在这里分享两点。
- 缓冲区 (temp) 包含数据结构的二进制表示形式。如果要检查内容是否有意义,可以将指针类型转换回其原始 pointer.ie:
结构员工 * 员工 PTR = static_cast<结构员工>(临时);结构员工>
cout <<employeePtr ->number;
。
-
当您尝试的对象时,反序列化的方式是可以的序列化占用连续内存。如果不是这种情况,您将不得不以其他方式处理它们(例如使用流)。此类案例的示例包括:
-
当您有指向某些已分配内存的指针、shared_ptr等时
-
容器类
-
相关文章:
- 函数复杂度分析
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 使用 Python Extension API 包装复杂C++类
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- 将平面阵列重塑为复杂的特征类型
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 如何在复杂继承中访问静态成员变量
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- OpenCV 傅里叶变换复杂输出问题
- 具有嵌套 if-else 的循环的时间复杂度
- 在 for 循环中处理复杂的发送 recv 消息
- C++:如何用单个命令替换复杂的迭代?
- C++中 std::map 的运行时复杂度是多少?