pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize);
buf - 指向要读取的字节数组的指针。
bufsize 字节数组的大小。
bufsize
的论点是什么?是.pb.h
文件中标题为/* Maximum encoded size of messages (where known) */
下的宏吗?
simple.c中的示例有点令人困惑,因为它使用为输出示例创建的缓冲区。
我的有效负载可达2048,编码的最大值为2051;我应该传入哪一个作为 size_t bufsize
?
long protobuf_message_len(void *buf, long offset, unsigned long len)
{
long start = offset;
unsigned long long value;
while(offset<=len)
{
offset = protobuf_read_varint(&value,buf,offset);
if (value == 0)
return offset-start-1;
switch (value & 0x07)
{
case 0:
offset = protobuf_read_varint(&value,buf,offset);
break;
case 1:
offset += 8;
break;
case 2:
offset = protobuf_read_varint(&value,buf,offset);
offset += value;
break;
case 5:
offset += 4;
break;
default:
return -2;
}
}
return -1;
}
unsigned long protobuf_read_varint(unsigned long long *value, void *buf, long offset)
{
unsigned short i = 0;
char byte;
*value = 0;
while (1) {
offset = protobuf_read_byte(&byte, buf, offset);
*value |= (unsigned long long)(byte & 0x7F) << i*7;
i++;
if ((byte & 0x80) == 0) {
return offset;
}
}
return 0;
}
long protobuf_read_byte(char *value, void *buf, long offset)
{
*value = *((char *) buf + offset);
return ++offset;
}