0

请查看此代码的上下文。

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。

有没有办法向结果缓冲区添加额外的字节?

4

1 回答 1

1

没有内置的工具来制作缓冲区长度前缀。您也不应该需要:UDP 数据包(和大多数传输机制)知道其有效负载的大小,因此自己添加前缀只是重复信息。

也就是说,如果你坚持不复制就这样做,你可以这样做:

auto size = static_cast<uint16_t>(builder.GetSize());
builder.PushElement(size);

这将为缓冲区添加 16 位大小的前缀。这种方法的问题是缓冲区已经针对它们的最大元素对齐,因此缓冲区现在可能在目标处未对齐。因此,您最好使用 32 位(或 64 位)长度,具体取决于缓冲区中的最大标量。

于 2016-03-29T05:22:48.120 回答