gpt4 book ai didi

c - 在带有nanopb的消息中使用重复字段规则

转载 作者:行者123 更新时间:2023-12-02 00:35:05 24 4
gpt4 key购买 nike

我很难理解如何使用重复字段规则。例如,这是我的 .proto:

message Test
{
repeated float value = 1;
}

现在,我正在初始化一个新的测试对象:

Test test = test_init_zero()

最后,我想分配一些值。例如:

float values[] = { 1.0, 2.2, 5.5, 7.13 }

我的问题是如何分配它们?是这样的吗

test.value = values
//or
test.value[0] = values[0] //... etc.

然后,我如何读回它们?

最佳答案

这取决于您如何定义原始文件中的重复字段。根据nanopb docs ,您要么像您一样指定 repeated 字段,然后使用回调函数在编码/解码期间单独处理每个项目,或者使用 nanopb 特定的设置,以便拥有固定长度的数组:

  1. Strings, bytes and repeated fields of any type map to callback functions by default.
  2. If there is a special option (nanopb).max_size specified in the .proto file, string maps to null-terminated char array and bytes map to a structure containing a char array and a size field.
  3. If (nanopb).fixed_length is set to true and (nanopb).max_size is also set, then bytes map to an inline byte array of fixed size.
  4. If there is a special option (nanopb).max_count specified on a repeated field, it maps to an array of whatever type is being repeated. Another field will be created for the actual number of entries stored.

例如字节数组需要使用max_size:

required bytes data = 1 [(nanopb).max_size = 40, (nanopb).fixed_length = true];

当使用nanopb编译时,这将创建以下字段:

// byte arrays get a special treatment in nanopb
pb_byte_t data[40];

或者,对于 float,您可以根据规则 4 使用 max_count:

repeated float data = 1 [(nanopb).max_count = 40];

然后你会得到:

size_t data_count;
float data[40];

如果您像您一样简单地定义一个repeated字段,那么nanopb将创建一个回调函数:

// repeated float value = 1;
pb_callback_t value;

这意味着您必须提供自己的函数来处理每个传入的项目:

yourobject.value.arg = &custom_args;
yourobject.value.funcs.decode = custom_function_for_decoding;

关于c - 在带有nanopb的消息中使用重复字段规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45844168/

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