代码之家  ›  专栏  ›  技术社区  ›  ravi

在C++中反序列化在C中序列化的字节数组#

  •  0
  • ravi  · 技术社区  · 7 年前

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

    namespace Microsoft.Kinect
    {
        public struct CameraSpacePoint
        {
            public float X;
            public float Y;
            public float Z;
       }
    }
    

    转换的数组 摄像机空间点 在C中,我使用了以下方法:

    public static byte[] ObjectToByteArray(Object obj)
    {
        BinaryFormatter bf = new BinaryFormatter();
        using (var ms = new MemoryStream())
        {
            bf.Serialize(ms, obj);
            return ms.ToArray();
        }
    }
    

    然后使用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));
    

    我在C++中声明了一个类似的类,如下所示:

    class CameraSpacePoint
    {
    public:
        float X;
        float Y;
        float Z;
    };
    

    我想知道如何将反向字节数组转换为我定义的 摄像机空间点

    1 回复  |  直到 7 年前
        1
  •  2
  •   Soroush Rabiei    7 年前

    C#编程语言中的内存布局和对象序列化与C/C++中的类似概念无关。使用不同的编译器/操作系统,即使在C++到C++的场景中,对于同一个结构或类,也可能会得到不同的内存布局(根据内存布局等)。

    您真正需要的是两种语言的通用协议来序列化和反序列化相似的对象。有一些序列化库支持两种语言: