Node.js Protobuf Can';解码缓冲器

Node.js Protobuf Can';解码缓冲器,node.js,protocol-buffers,protobufjs,Node.js,Protocol Buffers,Protobufjs,protobuf.js版本:^6.2.1 缓冲区 08351560459581840220A0D6048595895815BDF426422A0A0D7047595815BDF426 代码: protobuf.load("PulseFlagData.proto", function(err, root) { if (err) { callback(err);

protobuf.js版本:^6.2.1

缓冲区

08351560459581840220A0D6048595895815BDF426422A0A0D7047595815BDF426

代码:

protobuf.load("PulseFlagData.proto", function(err, root) {
                            if (err) {
                                callback(err);
                            }
                            var pulse = root.lookup("PulseFlagData");

                            callback(null, pulse.decode(parsed_data.payload)); 
 });   
syntax = "proto3";

message PulseFlagSample {
    required fixed32 timestamp = 1;
    required uint32 input = 2;
    required bool flag = 3;
}

message PulseFlagData {
    required uint32 config_version = 1;
    required fixed32 device_time = 2;
    required PulseFlagSample current = 3;
    optional PulseFlagSample last_hour = 4;
}
.proto文件:

protobuf.load("PulseFlagData.proto", function(err, root) {
                            if (err) {
                                callback(err);
                            }
                            var pulse = root.lookup("PulseFlagData");

                            callback(null, pulse.decode(parsed_data.payload)); 
 });   
syntax = "proto3";

message PulseFlagSample {
    required fixed32 timestamp = 1;
    required uint32 input = 2;
    required bool flag = 3;
}

message PulseFlagData {
    required uint32 config_version = 1;
    required fixed32 device_time = 2;
    required PulseFlagSample current = 3;
    optional PulseFlagSample last_hour = 4;
}
错误:

protobuf.load("PulseFlagData.proto", function(err, root) {
                            if (err) {
                                callback(err);
                            }
                            var pulse = root.lookup("PulseFlagData");

                            callback(null, pulse.decode(parsed_data.payload)); 
 });   
syntax = "proto3";

message PulseFlagSample {
    required fixed32 timestamp = 1;
    required uint32 input = 2;
    required bool flag = 3;
}

message PulseFlagData {
    required uint32 config_version = 1;
    required fixed32 device_time = 2;
    required PulseFlagSample current = 3;
    optional PulseFlagSample last_hour = 4;
}
/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:390 投掷指数(此,长度); ^

范围错误:索引超出范围:23+10>32 在范围错误(本机) 在IndexOutfrange(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:13:12) 在BufferReader.skip(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:390:19) 在BufferReader.ReaderPrototype.skipType(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:410:18) at类型._PulseFlagSample$decode[as decode](eof时的评估(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/node_modules/@protobufjs/codegen/index.js:102:25),:19:7) 在Type.decode_设置[作为解码](/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/Type.js:370:7) at类型._PulseFlagData$decode[as decode](eof时的评估(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/node_modules/@protobufjs/codegen/index.js:102:25),:16:27) 在Type.decode_设置[作为解码](/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/Type.js:370:7) 在/home/deck/NetBeansProjects/lora/server.js:42:50
完成时(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/root.js:84:9)

您的输入不是有效的协议缓冲区

  • 它似乎在消息中间被切断。最后一个顶级字段是一个以长度分隔的10字节字段,但消息仅在9字节后结束。因此,至少缺少一个字节。如果要显示其他字段,可能会丢失更多字节
  • 即使消息没有提前切断,它也似乎与您正在解析的类型不匹配。该消息似乎包含以下字段:

    uint32 a = 1;
    fixed32 b = 2;
    int32 c = 3;
    SomeMessageType d = 4;
    SomeMessageType e = 5;
    
    这些字段声明与您提供的
    PulseFlagData
    类型不一致

  • 以下是按字段细分的原始数据:

    08 35                       // 1: [u]int32, = 53
    15 60485958                 // 2: fixed32,  = 1615354200
    18 40                       // 3: [u]int32, = 64
    22 0a 0d6048595815bdf42642  // 4: sub-message, length 10
      0d 60485958               //   1: fixed32, = 1615354200
      15 bdf42642               //   2: fixed32, = 3186894402
    2a 0a 0d7047595815bdf426    // 5: sub-message, length 10, incomplete
      0d 70475958               //   1: fixed32, = 1883724120
      15 bdf426                 //   2: fixed32, incomplete
    

    你说得对!我丢失了最后一个字节。并从供应商处收到不正确的数据描述。非常感谢。