序列化一个struct并通过socket用C++发送它

Ste*_*ano 1 c++ sockets serialization

我会通过C++套接字发送一个结构.这是一个示例结构:

struct PIPPO
{
int x;
int y;
};
Run Code Online (Sandbox Code Playgroud)

我使用:

PIPPO test2;
test2.x = 10;
test2.y = 20;
Run Code Online (Sandbox Code Playgroud)

我有上面的代码序列化并通过套接字发送它.问题是,如果我尝试获取测试变量的HEX值,我只看到0A并且在接收数据的另一台计算机上实际上我无法将二进制数据转换回结构.有人能帮我吗?

template <class T> void SerializeData(char *outputArray, T inputData)
{
memcpy(outputArray, &inputData, sizeof(inputData));
}

char *StrToHexStr(char *str)
{
    char *newstr = new char[(strlen(str)*2)+1];
    char *cpold = str;
    char *cpnew = newstr;

    while('\0' != *cpold) {
        sprintf(cpnew, "%02X", (char)(*cpold++));
        cpnew+=2;
    }
    *(cpnew) = '\0';
    return(newstr);
}

char *test = new char[sizeof(PIPPO)];

memcpy((void *)&test, (void *)&test2, sizeof(test2));

send(this->m_socket, test, strlen(test), 0);
Run Code Online (Sandbox Code Playgroud)

Nek*_*esh 7

通过线路发送原始二进制表示可能会导致问题,尤其是当您具有异构网络或应用程序时.看看最适合这种情况的protobuf.