Пожалуйста, посмотрите этот код для контекста.
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-битную) длину, в зависимости от того, какие самые большие скаляры в вашем буфере.
Других решений пока нет …