gpt4 book ai didi

c++ - 将额外的字节填充到要通过网络发送的 flatbuffer 的缓冲区指针

转载 作者:行者123 更新时间:2023-11-28 05:45:39 25 4
gpt4 key购买 nike

请查看此代码以了解上下文。

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。

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

最佳答案

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

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

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

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

关于c++ - 将额外的字节填充到要通过网络发送的 flatbuffer 的缓冲区指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36275468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com