【发布时间】:2017-11-14 10:37:56
【问题描述】:
我有一个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 CameraSpacePoint
{
public:
float X;
float Y;
float Z;
};
我想知道如何将字节数组转换回我定义的CameraSpacePoint数组对象?
【问题讨论】:
-
如何被序列化和传输?你提到的bytes数组在哪里?
-
一般方法是使用谷歌协议缓冲区。另一种可能性是使用 memcpy(&yourCppStruct, buffer, size);但这不安全,不推荐。
-
@Ptaq666 如果您是序列化代码的唯一所有者,这怎么会不安全?
-
@PasserBy,好吧,如果缓冲区中的数据不一致(出于某种原因),可能很难调试。
标签: c++ arrays deserialization tcp-ip