2

私は構造体を持っています

[ProtoContract]
    public struct TenprintTemplateStructure
    {
        [ProtoMember(1)]
        public byte[] FeatureTenprint { get; set; } //Tenpritn NTemplate's NBuffer

        [ProtoMember(2)]
        public int TemplateID { get; set; } //Template ID

        [ProtoMember(3)]
        public long TemplateSize { get; set; } //Template Size

        [ProtoMember(4)]
        public string PersonID { get; set; } //Person ID

        [ProtoMember(5)]
        public int IsActive { get; set; } // Person's Status
    };

長さのプレフィックスが Fixed32 の c# proto-buf を使用して、この構造体の複数のインスタンスをファイルにシリアル化しています。コードは以下のとおりです (tenprintTemplateStruct は、私が書いている構造体です)

ProtoBuf.Serializer.SerializeWithLengthPrefix(stream, tenprintTemplateStruct, ProtoBuf.PrefixStyle.Fixed32, 0);

C ++を使用してデシリアライズできることは知っています。私はいくつかの解決策を試しましたが、まだ成功していません。

誰もこれをやったことがありますか?

4

1 に答える 1

3

C++ 側では、次の 4 つの手順を実行する必要があります。

  • protocツールを使用して C++ コードを生成します。.proto スキーマを手動で記述するか、string proto = Serializer.GetProto<TenprintTemplateStructure>();(.NET コードから) 開始点として使用できます。
  • 入力から正確に 4 バイトを読み取り、それを 32 ビット整数として解析します。Fixed32リトルエンディアンとして文書化されているため、次のようにします。
  • この長さの長さに制限されたストリームで実際のストリームをラップします。GoogleはこれにLimitingInputStreamを提供します
  • 実際に逆シリアル化するためのC++ ガイドに従ってください- 主にParseFromIstream
于 2013-03-08T12:31:50.533 に答える