我正在努力将以下结构复制到字节数组以通过命名管道发送。我发现自从我给出静态定义的字节数组切换到向量,因为我的主机长度会有不同的长度。
以下是我的结构概要:
USHORT version; // Header Version
USHORT type; // IPVersion
USHORT count; // Number of IP addresses of remote system
USHORT length; // Header Length (1)
BYTE SysConfigLocIP[4];
BYTE SysConfigRemoteIP[4];
USHORT lengthHost;
std::vector<BYTE>HostName;
之后,在填充结构后,我将其复制到如下字节:
BYTE Response[sizeof(aMsg)]
memcpy(response, &aMsg, sizeof(aMsg))
当我在调试期间检查容器时,我发现我的数组是vector正在为主机保存正确的信息。但是,在复制到响应字节数组之后,我发现已复制的数据完全不同。这是一个有效的操作,如果是这样,我能做什么才能正确地从我的矢量BYTE数组中复制数据。如果没有,我可以使用什么其他策略动态调整结构大小以发送主机名?感谢您花时间阅读我的问题,感谢您的反馈。
答案 0 :(得分:2)
我正在努力将以下结构复制到要发送的字节数组中 在命名管道上。
命名管道(或其他形式的进程间或处理器间通信)无法理解您的struct
,也不理解vector
。他们只是按照byte-in-byte-out
的概念运作。程序员应该为这些字节赋予意义。
根据建议,请阅读序列化。尝试从http://en.wikipedia.org/wiki/Serialization开始。如果允许,您可以使用Boost解决方案http://www.boost.org/doc/libs/1_55_0/libs/serialization/doc/index.html,但我仍然鼓励您首先了解基础知识。
作为练习,首先尝试将vector<int>
从发件人转移到接收者。接收器不得隐含地知道向量中的元素数量。实现这一目标后,从int
迁移到struct
将是微不足道的。
答案 1 :(得分:1)
memcpy
仅适用于POD(普通旧数据)类型。矢量不是POD。相反,编写代码将缓冲区中的每个字节准确放置在需要的位置。不要依赖&#34;魔法&#34;。
答案 2 :(得分:0)
在C ++中99%的时间没有理由使用memcpy。它打破了课程。了解复制构造函数和std :: copy并改为使用它们。