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 のサイズをパックする必要があります (2 バイト固定)。バッファ全体をコピーせずに追加/オフセットする好ましい方法はありますか?

受け取った後、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 に答える