28 C++ 字节流与结构体类型互转

这里不讲 protobuf,只是一个特定情形下的特定实现。

0 前言

今天我们来介绍下 C++ 中字节流(也称字节码)与结构体类型之间是如何互转的,socket 通信中经常遇到这个问题(tcp 通道中传输的消息都是字节码),比如 ip 地址。

#include <iostream>
#include <cstring>
#include <stdexcept>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <mutex>
#include <deque>
#include <condition_variable>
#include <thread>
#include <pthread.h>
#include <unistd.h>
#include <memory>
struct personal {
    personal(int age = 0, std::string sex = "") : age(age), sex(sex) {};
 int age;
    std::string sex;
int main() {
    personal p(10, "male");
 // 结构体转成字节流
    std::vector<char> bytes(sizeof(p));
    memcpy(bytes.data(), &p, sizeof(p));
 for (auto b : bytes) {
        std::cout << b << " ";
    std::cout << "\n";
 // 字节流转成结构体