问题标签 [protobuf-c]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1440 浏览

c - 在 C 中将协议缓冲区与 JSON 相互转换,而不生成 C 代码

我需要使用.desc文件来读取序列化的协议缓冲区消息并将它们转换为 JSON(使用 jansson)。

这是因为协议缓冲区消息格式将比 C 代码更频繁地更改。这些.desc文件将是可执行文件的运行时输入。

我找到了https://github.com/Sannis/protobuf2json-c但我对此的解读是它需要生成 C 代码。特别是ProtobufCMessage需要存在被解码的消息,并且我看不到在/usr/include/google/protobuf-c/protobuf-c.h不生成 C 代码的情况下制作 ProtobufCMessage (from ) 的方法。

我在这里遗漏了什么,还是需要编写新代码?

0 投票
1 回答
138 浏览

windows - Protobuf 3.0.0-alpha1 安装在 Windows 上。病毒?

我只是尝试使用 MSYS 和 MinGW 在 Windows 上安装 protobuf 3.0.0-alpha1,但它无法检查我的 C 编译器是否工作。就像每次都失败一样,我的诺顿自动阻止窗口出现并说它阻止了 a.exe,因为它包含 SAPE.heur.3161 病毒。

有人知道该怎么做吗?

0 投票
2 回答
1439 浏览

c++ - Protobuf:C++ 字符串,里面有空字符

我正在处理内存中的一个缓冲区,该缓冲区被读取为 protobuf。我需要反序列化它。此 protobuf 的内容包含一个字符串,该字符串中可能有也可能没有空字符。例如,字符串可能是这样的:“name\0first”。如果我有这样的输入,我可以反序列化的字符串总是看起来像“name”,因为字符串类删除了空字符之后的部分。

在这种情况下如何访问完整的字符串?字符串长度函数在这种情况下显然没有帮助。

0 投票
3 回答
15282 浏览

protocol-buffers - protobuf 服务方法可以返回原始类型吗?

我正在尝试使用 Google protobuf,并且我有以下描述:

message.proto文件:

service.proto文件:

我正在尝试生成 c++ 源代码并出现错误:

$ protoc service.proto --cpp_out=/tmp/proto/build

service.proto:4:40:预期的消息类型。

我必须只返回用户定义的类型吗?是否支持原始(likeboolstring)?我可以使用原始类型作为服务方法参数(而不是Request在我的示例中)吗?

0 投票
2 回答
1807 浏览

c++ - 从固定大小的字节缓冲区的连续块中解析 protobuf 消息序列

由于我对 C++ 的了解不足,我已经为此苦苦挣扎了两天。我需要做的是使用 protobuf C++ API 从一个大文件中解析消息序列,这个文件可能包含数百万条这样的消息。直接从文件中读取很容易,因为我总是可以执行“ReadVarInt32”来获取大小,然后执行 ParseFromCodedStream 并将限制推送到 CodedInputStream,如本文所述。但是,我正在使用的 I/O 级别 API(实际上是 libuv)需要为每个读取回调操作分配固定大小的缓冲区。显然,块大小与我正在读出的消息大小无关。

这让我的生活变得艰难。基本上每次我从文件中读取并填充固定大小的缓冲区(比如 16K)时,该缓冲区可能包含数百条完整的 protobuf 消息,但该缓冲区的最后一块可能是不完整的消息。所以我想,好吧,我应该做的是尝试尽可能多地读取消息,最后,提取最后一个块并将其附加到我读出的下一个 16K 缓冲区的开头,继续直到我达到 EOF文件。我使用 ReadVarInt32() 来获取大小,然后将该数字与缓冲区大小的其余部分进行比较,如果消息大小较小,则继续读取。

有一个名为GetDirectBufferPointer的 API,因此我在读出下一条消息的大小之前尝试使用它来记录指针位置。但是我怀疑由于字节顺序的怪异,如果我只是从指针开始的地方提取字节数组的其余部分并附加到下一个块,Parse 不会成功,实际上前几个字节(我认为是 8 个)完全搞砸了.

或者,如果我执行 codedStream.ReadRaw() 并将剩余流写入缓冲区,然后附加到新块的头部,则数据不会被破坏。但问题是这次我将丢失“大小”字节信息,因为它已经在“ReadVarInt32”中“读取”了!即使我只是继续记住上次读取的大小信息并直接调用下一次迭代 message.ParseFromCodedStream() ,它最终还是读取了一个字节,并且某些部分甚至损坏了,无法成功恢复对象。

我现在真的很想不通。是否可以优雅地使用 protobuf 和需要固定大小的中间缓冲区的 API?非常感谢任何输入,谢谢!

0 投票
1 回答
580 浏览

json - .Net 协议缓冲区到 JSON,JsonFormatReader 类不处理最外面的花括号?

我正在使用 Google 协议缓冲区,使用 protobuf-csharp-port 库(https://code.google.com/p/protobuf-csharp-port/)。Google.ProtocolBuffers.Serialization 类有一个JsonFormatReader/JsonFormatWriter类,当我使用它们时,它们不会将开始和结束的花括号放置到 JSON 文档中,如果我添加开始和结束大括号,它们也无法读取他们编写的相同文档。

所以例如调用

创建:

如果我尝试解析

使用

我得到以下信息:

为什么缺少 { },这是有效的 JSON 吗?

0 投票
1 回答
337 浏览

cmake - Cmake错误构建库

我编写了简单的 Protobuf-C 库。在将其编译为 lib 时,我有以下错误:

CMakeLists.txt

请帮我建立lib。我的存储库放置在 github存储库分支开发

0 投票
1 回答
528 浏览

c++ - 为 mbed LPC1768 arm-none-eabi-g++ 构建 protobuf-c、libprotobuf-c

我正在尝试为 mbed 平台构建 libprotobuf-c,但 ./configure 设置存在一些问题。我想我需要更多的编译标志,但不确定要包括什么。任何帮助将非常感激。谢谢!

0 投票
2 回答
8724 浏览

c++ - 在 C/C++ 中使用 ProtoBuf 进行深度复制

假设我有一个指针数组,每个指针都指向结构,这些结构可能再次具有指向其他结构的指针;是否可以使用 protobuf 处理序列化?如果是这样,怎么做?

任何帮助将不胜感激。

0 投票
2 回答
8377 浏览

eclipse - 无法让 IntelliJ 识别 proto 编译的 Java 类文件

我们的项目中有一个 build.xml,但 IntelliJ 无法从中导入。我得到一个:

在 Eclipse 上,我可以执行以下操作:

并选择顶级文件夹。我在 IJ 也做了同样的事情。项目导入和索引很好,我可以搜索任何类。但是,它不能识别 protobuf 编译的类文件。我安装了 proto 插件,因此它的语法突出显示了我的 .proto 文件,但仍然没有意识到它需要引用一个已编译的类输出。我需要做一些特别的事情来让它识别这些文件吗?