Со стороны C ++ вам придется использовать комбинацию ReadVarint32 () и VarintSize32 () сделать что-то вроде этого:
char buf[4];
buf = some_api_call(); /* _Copy/peak_ up to 4 bytes off the wire */
CodedInputStream cos(buf, sizeof(buf) - 1);
uint32_t frame_sz;
if (!cos.ReadInputStream(&frame_sz)) {
// Unable to read the frame size
return false;
}
frame_sz должен иметь допустимое значение, которое сообщит вам, сколько байтов нужно прочитать.
uint32_t consumed_bytes = CodedOutputStream::VarintSize32(frame_sz);
Теперь вы знаете, сколько байтов было использовано для генерации frame_sz.
Я быоберните эти вызовы в библиотеку, в которую я вставил "C" и соединил бы из вашего приложения.