2016-12-20 4 views
1

protobuf.jsバージョンを解読することはできません:^ 6.2.1いるProtobufはバッファ

バッファ

083515604859581840220a0d6048595815bdf426422a0a0d7047595815bdf426

コード:

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

          callback(null, pulse.decode(parsed_data.payload)); 
}); 

.protoファイル:

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投indexOutOfRange(この長さ)。 ^

例外RangeError:範囲外のインデックス:23 + 10> 32 indexOutOfRangeで (ネイティブ)例外RangeErrorで (/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/reader.js:13:12 ) at BufferReader.skip(/ホーム/デッキ/ NetBeansProjects/lora/node_modules/protobufjs) /src/reader.js:410:18) at Type._PulseFlagSample $ decode [as decode](evalでのeof(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/node_modules/@protobufjs/codegen/index.js) :102:25)、:19:7) at Type.decode_setup [デコードとして](/ home/deck/NetBeansProjects/lora/node_modules/pr (/ home/deck/NetBeansProjects/lora/node_modules/protobufjs/node_modules/@ protobufjs/codegen/index)を指定してください。 (/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/type.js:370:7) の/ home/dsode_setupに[デッキ/ NetBeansProjects/LORA/server.js:42:50 仕上げで(/home/deck/NetBeansProjects/lora/node_modules/protobufjs/src/root.js:84:9)

答えて

1

あなたの入力が有効ではありませんプロトコルバッファ。

  1. メッセージの途中で途切れているようです。最後の最上位フィールドは長さで区切られた10バイトのフィールドですが、メッセージは9バイトだけで終了します。したがって、少なくとも1バイトが欠落しています。追加のフィールドが表示されるはずです。
  2. メッセージが途中で途切れることがなくても、あなたが解析しているタイプと一致するようには見えません。これらのフィールド宣言は、あなたが与えたPulseFlagDataタイプをラインアップしていない

    uint32 a = 1; 
    fixed32 b = 2; 
    int32 c = 3; 
    SomeMessageType d = 4; 
    SomeMessageType e = 5; 
    

    :メッセージは、フィールドを持っているように見えます。ここで

は、フィールドで分解生データです:

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 
+0

あなたが正しいです!私は最後のバイトを失った。ベンダーからのデータの誤った記述を受け取りました。ありがとうございました! – levide

関連する問題