我正在努力将以下结构复制到字节数组以通过命名管道发送。我发现自从我从给出静态定义的字节数组切换到 vector 以来,因为我的主机长度将具有不同的长度。
这是我的结构大纲:
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 数组保存了主机的正确信息。但是,在复制到 Response 字节数组之后,我发现复制的数据完全不同。这是一个有效的操作吗,如果是这样,我该怎么做才能正确地将数据从我的 vector 复制到 BYTE 数组。如果没有,我可以使用哪些其他策略来动态调整结构大小以发送主机名?感谢您花时间阅读我的问题,感谢任何反馈。
最佳答案
I'm working to copy the following structure to a byte array to send over a named pipe.
命名管道(或其他形式的进程间或处理器间通信)不理解您的 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>
从发送者到接收者。接收方不得隐式知道 vector 中的元素数。一旦你实现了这一点,从 int
迁移给你的struct
将是微不足道的。
关于c++ - Memcpy 和结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22871083/