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被记录为小端,所以:这样做
  • wrap you actual stream with a length-limited stream of this length; google provide LimitingInputStream for this
  • follow the C++ guide for actually deserializing - primarily ParseFromIstream
于 2013-03-08T12:31:50.533 回答