gpt4 book ai didi

size - 我如何提前知道 nanopb 中的缓冲区大小是否足够?

转载 作者:行者123 更新时间:2023-12-05 04:44:33 26 4
gpt4 key购买 nike

根据示例,我正在尝试使用 nanopb: https://github.com/nanopb/nanopb/blob/master/examples/simple/simple.c

缓冲区大小初始化为128:

uint8_t 缓冲区[128];

我的问题是我怎么知道(提前)这个128-length buffer 足以传输我的消息?如何在初始化(或编码)之前决定一个合适的(足够但不会因为过大而浪费太多)缓冲区大小?

看起来像一个菜鸟问题:),但感谢您的快速建议。

最佳答案

如果可能,nanopb 在生成的 .pb.h 文件中添加一个定义,该文件具有消息的最大编码大小。在文件 examples/simple/simple.pb.h 中,您会发现:

/* Maximum encoded size of messages (where known) */
#define SimpleMessage_size 11

并且可以指定uint8_t buffer[SimpleMessage_size];

仅当所有重复字段和字符串字段都指定了 (nanopb).max_count(nanopb).max_size 选项时,此定义才可用。

出于许多实际目的,您可以选择您估计足够大的缓冲区大小,并处理错误情况。也可以使用 pb_get_encoded_size() 来计算编码大小并动态分配存储空间,但通常这在嵌入式应用程序中不是一个很好的解决方案。当总系统内存大小有限时,通常最好有一个可用于测试的恒定大小的缓冲区,而不是让可用的动态内存量在运行时变化。

关于size - 我如何提前知道 nanopb 中的缓冲区大小是否足够?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69343376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com