我正在尝试构建和编写一个二进制请求并有一个“这可能”类型的问题。对我来说重要的是要提到请求的接收者不知道我在下面包含的数据结构,它只是期望一个字节序列,但是使用结构似乎是准备请求片段的一种方便方法,然后轻松地编写它们。
编写页眉和页脚很好,因为它们是固定大小的,但是由于矢量,我遇到了结构“详细信息”的问题。现在我正在写入一个文件,所以我可以检查请求是否符合规范,但目的是最终使用 boost asio 串行端口写入 PLC
我可以使用这样的语法来编写一个结构,但是当它到达向量时会写入指针地址而不是值
myFile.write((char*) &myDataRequest, drSize);
我可以使用此语法自行编写向量,但我必须在 0 处包含索引器才能写入值
myFile.write((char*) &myVector[0], vectorSize);
有没有一种优雅的方法来二进制编写一个包含向量(或其他合适的集合)的结构,一次完成?例如,如果我以不同的方式声明了向量,或者我是否愿意为结构内的内容进行多次写入。如果我用数组替换向量,我可以一次性发送结构(不需要包含任何索引器),但直到运行时我才知道所需的大小,所以我认为它不合适。
我的结构
struct Header
{ ... };
struct Details
{
std::vector<DataRequest> DRList;
};
struct DataRequest
{
short numAddresses; // Number of operands to be read Bytes 0-1
unsigned char operandType; // Byte 2
unsigned char Reserved1; //Should be 0xFF Byte 3
std::vector<short> addressList; // either, starting address (for sequence), or a list of addresses (for non-sequential)
};
struct Footer
{ ... };