C++ 反序列化C+中的字节数组+;它是用C序列化的#

C++ 反序列化C+中的字节数组+;它是用C序列化的#,c++,arrays,deserialization,tcp-ip,C++,Arrays,Deserialization,Tcp Ip,我有一个数组,我用C#编程语言将其转换为字节。CameraSpacePoint的定义如下: namespace Microsoft.Kinect { public struct CameraSpacePoint { public float X; public float Y; public float Z; } } class CameraSpacePoint { public: float X; floa

我有一个数组,我用C#编程语言将其转换为字节。
CameraSpacePoint
的定义如下:

namespace Microsoft.Kinect
{
    public struct CameraSpacePoint
    {
        public float X;
        public float Y;
        public float Z;
   }
}
class CameraSpacePoint
{
public:
    float X;
    float Y;
    float Z;
};
为了将
CameraSpacePoint
数组转换为字节,我在C#中使用了以下方法:

然后使用TCP传输字节数组。我试图通过以下方式在另一台机器上接收此字节数组:

#include <ros/ros.h>
#include <boost/asio.hpp>
constexpr size_t data_size = 512 * 424;
unsigned char data_buffer[data_size];
boost::asio::read(socket, boost::asio::buffer(data_buffer, data_size));

我想知道如何将字节数组转换回我定义的
CameraSpacePoint
objectofarray?

C#编程语言中的内存布局和对象序列化与C/C++中的类似概念无关。拥有不同的编译器/ OSES,即使在C++到C++场景中,对于相同的结构或类(根据内存布局等),也可能会得到不同的内存布局。 您真正需要的是两种语言的通用协议来序列化和反序列化相似的对象。有一些序列化库支持两种语言:

    支持C和C++,它是平台中立的。(例如,您可以使用它在big-endian ARM和little-endian x86_64之间进行序列化/反序列化)

  • 支持C#和C++


C++编程语言中的内存布局和对象序列化与C/C++中的类似概念无关。拥有不同的编译器/ OSES,即使在C++到C++场景中,对于相同的结构或类(根据内存布局等),也可能会得到不同的内存布局。 您真正需要的是两种语言的通用协议来序列化和反序列化相似的对象。有一些序列化库支持两种语言:

    支持C和C++,它是平台中立的。(例如,您可以使用它在big-endian ARM和little-endian x86_64之间进行序列化/反序列化)

  • 支持C#和C++


它是如何序列化和传输的?你提到的字节数组在哪里?一般的方法是使用google协议缓冲区。另一种可能是使用memcpy(&yourCppStruct,buffer,size);但这是不安全的,不推荐使用。@Ptaq666如果您是序列化代码的唯一所有者,这怎么不安全?@PasserBy,好吧,假设缓冲区中的数据不一致(出于某种原因),那么调试可能会很困难。它可能与序列化和传输的方式重复?你提到的字节数组在哪里?一般的方法是使用google协议缓冲区。另一种可能是使用memcpy(&yourCppStruct,buffer,size);但这是不安全的,不推荐使用。@Ptaq666如果您是序列化代码的唯一所有者,这怎么不安全?@PasserBy,好的,假设缓冲区中的数据不一致(出于某种原因),那么调试可能会很困难。非常感谢您,可能会重复。我喜欢。然而,我最近听说了。对此有何评论?非常感谢。我喜欢。然而,我最近听说了。对此有何评论?
class CameraSpacePoint
{
public:
    float X;
    float Y;
    float Z;
};