在 C# 中反序列化在 C++ 中序列化的字节数组
Deserialize bytes array in C++ which was serialized in C#
我有一个 CameraSpacePoint 的数组,我已经用 C# 编程语言将其转换为字节。 CameraSpacePoint
定义如下:
namespace Microsoft.Kinect
{
public struct CameraSpacePoint
{
public float X;
public float Y;
public float Z;
}
}
为了将CameraSpacePoint
的数组转换成字节,我在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 如下:
class CameraSpacePoint
{
public:
float X;
float Y;
float Z;
};
我想知道如何将字节数组转换回我定义的 CameraSpacePoint
数组对象?
C#编程语言中对象的内存布局和序列化与C/C++中的类似概念无关。具有不同的 compilers/OSes,即使在 C++ 到 C++ 的情况下,您可能会为相同的结构或 class 获得不同的内存布局(根据内存布局等)。
您真正需要的是两种语言的通用协议,用于序列化和反序列化相似的对象。有一些支持两种语言的序列化库:
Google's Protocol Buffers 同时支持 C# 和 C++,平台无关。 (例如,您可以在大端 ARM 和小端 x86_64 之间使用它 serialize/deserialize)
Microsoft Bond 同时支持 C# 和 C++
我有一个 CameraSpacePoint 的数组,我已经用 C# 编程语言将其转换为字节。 CameraSpacePoint
定义如下:
namespace Microsoft.Kinect
{
public struct CameraSpacePoint
{
public float X;
public float Y;
public float Z;
}
}
为了将CameraSpacePoint
的数组转换成字节,我在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 如下:
class CameraSpacePoint
{
public:
float X;
float Y;
float Z;
};
我想知道如何将字节数组转换回我定义的 CameraSpacePoint
数组对象?
C#编程语言中对象的内存布局和序列化与C/C++中的类似概念无关。具有不同的 compilers/OSes,即使在 C++ 到 C++ 的情况下,您可能会为相同的结构或 class 获得不同的内存布局(根据内存布局等)。
您真正需要的是两种语言的通用协议,用于序列化和反序列化相似的对象。有一些支持两种语言的序列化库:
Google's Protocol Buffers 同时支持 C# 和 C++,平台无关。 (例如,您可以在大端 ARM 和小端 x86_64 之间使用它 serialize/deserialize)
Microsoft Bond 同时支持 C# 和 C++