将结构作为字节数组进行通信

时间:2017-11-05 20:36:04

标签: c++ memcpy

在学校项目中,我们有一个由嵌入式系统,XBee模块和服务器组成的系统,所有这些系统都将(将)在struct之间进行组织。我的想法是序列化数组中的数据,模块可以理解,发送此数组并在另一侧重建struct

我们在设计中使用C ++(无C ++ 11),为方便起见,有时struct将包含std::stringstd::vector。我一直在尝试将结构(例如两个Xbee模块之间)作为char的C样式数组发送。到目前为止,我有:

// From C:
#include<string.h>

// From C++:
#include<iostream>
#include<string>
#include<vector>


// A Project related struct:
struct A
{
    std::string              name;
    std::vector<std::string> hobbies;
};

int main()
{
    // Instantiate an object:
    A a;
    a.name    = "John";
    a.hobbies = {"hobby1", "hobby2"};

    // Get the actual size of a, in bytes:
    const size_t N = sizeof(a);

    // Create a table of chars, big enough to accommodate 'a', It
    // is this I want to communicate:
    char buffer[N];

    // Copy 'a' to 'buffer', byte-wise:
    memcpy(buffer, &a, N);

    // Retreive information:
    A b;
    memcpy(&b, buffer, N); // <-- This line causing segfault.

    std::cout << b.name << std::endl;

    return 0;
}

此代码段错误。它让我对这个主题做了一些更多的研究,我发现这个方法只适用于只包含C风格类型的结构。我没有找到的是如何实现我的沟通。

我怎么能这样做?

0 个答案:

没有答案