Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从类对象到结构变量的memcpy_C++_C++11 - Fatal编程技术网

C++ 从类对象到结构变量的memcpy

C++ 从类对象到结构变量的memcpy,c++,c++11,C++,C++11,我有两种不同的申请。我必须将信息从一个应用程序发送到另一个应用程序。在一个应用程序中,类对象中有编码,而在另一个应用程序中,它在具有相同数据类型的结构对象中解码 将类对象复制到具有相同数据类型的结构是正确的实现吗?或者我应该改变其中一个编码/解码部分吗 我试过了,它似乎是正确的,但我不明白它是否正确 例如 #include <iostream> #include <cstring> class capn{ public: unsigned short i

我有两种不同的申请。我必须将信息从一个应用程序发送到另一个应用程序。在一个应用程序中,类对象中有编码,而在另一个应用程序中,它在具有相同数据类型的结构对象中解码

将类对象复制到具有相同数据类型的结构是正确的实现吗?或者我应该改变其中一个编码/解码部分吗

我试过了,它似乎是正确的,但我不明白它是否正确

例如

#include <iostream>
#include <cstring>

class capn{
    public:
    unsigned short int apn[8];
    unsigned short int a;
};

class creq{
    public:
    capn a1;
    capn a2;
    unsigned short int t;
    capn a3;
};

class cy{
    public:
    capn a1;
    capn a2;
    unsigned short int aaa[34];
    capn a3;
    unsigned short int bbb[12];
};

class cx{
    public:
    cx(){
        a=0;
        b=0;
        c=0;
        memset(d,0,8);
    }
    unsigned int a;
    unsigned int b;
    unsigned int c;
    union {
        creq requ;
        cy pasd;
    };
    unsigned short int d[8];
};



struct apn{
    unsigned short int apn[8];
    unsigned short int a;
};

struct req{
    struct apn a1;
    struct apn a2;
    unsigned short int t;
    struct apn a3;
};

struct y{
    struct apn a1;
    struct apn a2;
    unsigned short int aaa[34];
    struct apn a3;
    unsigned short int bbb[12];
};

struct x{
    unsigned int a;
    unsigned int b;
    unsigned int c;
    union {
        struct req requ;
        struct y pasd;
    };
    unsigned short int d[8];
};

int main()
{
    struct x ox;
    ox.a=1;
    ox.b=2;
    ox.c=3;
    ox.d[0]=4;
    ox.requ.a1.a=5;
    ox.requ.t=6;

    cx obj;
    std::cout<<sizeof(ox)<<std::endl;
    std::cout<<sizeof(obj)<<std::endl;

    memcpy(&obj,&ox,sizeof(ox));
    std::cout<<obj.a<<" " <<obj.b<< " " <<obj.c<< " "<<obj.d[0]<< " " <<obj.requ.a1.a<<" "<<obj.requ.t<<std::endl;
    return 0;
}

这里有两个问题

如何序列化对象, 如何将其传输到另一个地址空间。 只有当对象包含成员和低级体系结构细节(如对齐、endianess等)时,才可能使用memcpy进行序列化。为了减少麻烦,您可以尝试序列化为XML


要传送到接收器,这取决于接收器的位置。例如,如果它是不同的地址空间,则可以使用或在Windows中使用。如果是同一地址空间中的DLL,您只需共享一个指向序列化数据的指针。

这里有两个问题

如何序列化对象, 如何将其传输到另一个地址空间。 只有当对象包含成员和低级体系结构细节(如对齐、endianess等)时,才可能使用memcpy进行序列化。为了减少麻烦,您可以尝试序列化为XML

要传送到接收器,这取决于接收器的位置。例如,如果它是不同的地址空间,则可以使用或在Windows中使用。如果它是同一地址空间中的DLL,则可以简单地共享指向序列化数据的指针