【问题标题】:Using nanopb and protobuf for serialisation/deserialisation together in applications在应用程序中一起使用 nanopb 和 protobuf 进行序列化/反序列化
【发布时间】:2020-09-11 07:47:36
【问题描述】:

是否可以有两个应用程序 App-1 和 App-2,一个在 OS-1 上运行,另一个在 OS-2 上运行。 App-1 使用 nanopb 序列化/反序列化数据并与 App-2 通信。 App-2 使用 google protobuf 序列化/反序列化数据并与 App-1 通信。

【问题讨论】:

    标签: protocol-buffers nanopb


    【解决方案1】:

    是的。这是 protobuf 的一个重点,能够与不同语言的实现进行通信。所有 protobuf 库都应该相互兼容。

    nanopb 与 Google 的 C++ protobuf 库的具体情况由 nanopb alltypes 测试用例检查,两个库的二进制输出是逐字节相等的。

    【讨论】:

    • 因此,在类型是字节序列的序列化/反序列化点,它们是一对一等价的。它们也有相同的来源,是从同一个foo.proto 文件编译的,对吗?但是它们在编程上是不同的,例如pb_encode vs SerializeToString()pb_decode vs ParseFromString。所以总的来说,我不能依赖同一个 API 来与每个我使用的 API 进行交互。
    • @jxramos 是的,让 API 在不同的编程语言中等效是相当困难的 - 一些方法名称可以标准化,但实际上它们不是。
    • 是的,跨语言肯定是一个挑战。我面临的场景是以一种语言发生的。我正在用 C++ 编写一个 pybind 库,我尝试使用一个宏将 c++ google protobuf 转换为 python google protobuf,以实现 c++ 和 python 运行时之间的类型互操作性。当我编译时,我实际上发现我有一个 nanopb 对象,而不是一个 c++ google protobuf。该宏是使用SerializeToString 编写的,那时我意识到我假设了太多我认为在 nanopb 和 google protobuf 实体之间建立的等价性。很高兴知道!
    • 是的。如果 nanopb 是一个 C++ 库,我可能会镜像 Google 的 API。但它是纯 C 库,遵循 C 风格的 API 设计更有意义。
    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多