请查看此代码以了解相关信息。
auto normalized_log = CreateNormalizedLog(builder, pairs);
builder.Finish(normalized_log);
auto buffPtr = builder.GetBufferPointer();
SendUdpPacket(&ipInfo, reinterpret_cast<SOCKET>(ipInfo.hdle), buffPtr, builder.GetSize());
我需要打包创建的buffPtr的大小(固定的两个字节)。是否有任何首选方法可以在不复制整个缓冲区的情况下附加/抵消?
我认为我无法为架构添加大小,因为收到后我应该知道大小而不调用getRootAsNormalizedLog。
有没有办法在结果缓冲区中添加额外的字节?
答案 0 :(得分:1)
没有内置工具可以使缓冲区长度为前缀。您不应该需要:UDP数据包(和大多数传输机制)知道其有效负载的大小,因此自己添加前缀只是重复信息。
那就是说,如果你坚持这样做而不复制,你可以这样做:
auto size = static_cast<uint16_t>(builder.GetSize());
builder.PushElement(size);
这将为缓冲区添加16位大小的前缀。这种方法的问题是缓冲区已经针对其最大元素进行了对齐,因此缓冲区现在可能在目标处未对齐。因此,最好使用32位(或64位)长度,具体取决于缓冲区中最大的标量。