首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NanoPB编码和解码重复的int32_t值

NanoPB编码和解码重复的int32_t值
EN

Stack Overflow用户
提问于 2022-08-24 08:23:42
回答 1查看 97关注 0票数 0

当我将int数组编码为消息,然后在我的C#应用程序中解码它时,我遇到了问题。当我解码int数组时,MQTT会将编码的字节发送到C#。我在那里破译它,我的所有价值在那里翻了一番。然后,我将相同的字节直接发送回NanoPB应用程序,在那里它也会被解码,这里的所有值都是正常的。怎么一回事?

我的原文件:

代码语言:javascript
复制
syntax = "proto2";

message stringCallback{
    required string name = 1;
    required string surname = 2;
    required int32 age = 3;
    repeated int32 values = 4;
}

我的NanoPB编码函数:

代码语言:javascript
复制
bool IntArray_encode(pb_ostream_t *ostream, const pb_field_t *field, void* const* arg){
  IntArray* arr = (IntArray*)*arg;
  
  for(int i = 0; i < arr->count; i++){
    if(!pb_encode_tag_for_field(ostream, field)){
      Serial.println("Encoding failed!");
      return false;
    }

    if(!pb_encode_svarint(ostream, arr->values[i])){
      Serial.println("Encoding failed!");
      return false;
    }
  }

  return true;
}

我的NanoPB解码功能:

代码语言:javascript
复制
bool IntArray_decode(pb_istream_t *stream, const pb_field_t *field, void** arg){
  IntArray* arr = (IntArray*)*arg;
  int64_t number;

  if(!pb_decode_svarint(stream, &number)){
    Serial.println("Decoding failed!");
    return false;
  }

  Serial.println(number);
  IntArray_add(arr, (int32_t)number);

  return true;
}

输出NanoPB:

代码语言:javascript
复制
Name = Testing
Surname = Purpose
Age = 23
[14 11 10 5 109 32321 23 19 15]

输出C#:

代码语言:javascript
复制
Name = Testing
Surname = Purpose
Age = 23
[28 22 20 10 218 64642 46 38 30 ]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-24 09:39:31

if(!pb_encode_svarint(ostream,arr->valuesi)){

斯瓦林()函数用于sint32sint64类型。

您的.proto文件指定了int32,因此您应该使用pb_encode_varint()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73469789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档