![](/img/trans.png)
[英]Problem deserializing data with protobuf-net that was serialzed by google's protobuf
[英]protobuf-net - problem with deserializing on C++ side :(
我在.NET应用程序中使用ProtoBuf-Net来序列化以下内容:(。proto格式)
message ProtoScreenBuffer {
optional int32 MediaId = 1;
optional bytes Data = 2;
optional bool LastBuffer = 3;
optional int64 StartTime = 4;
optional int64 StopTime = 5;
optional int32 Flags = 6;
optional int32 BufferSubType = 7;
optional int32 BufferType = 8;
optional Guid Guid = 9;
repeated int32 EncryptedDataStart = 10;
repeated int32 EncryptedDataLength = 11;
}
我的目标是将其序列化并将其作为单个样本注入到ASF文件中。
我称其为序列化:
MemoryStream ms = new MemoryStream();
Serializer.Serialize<ProtoScreenBuffer>(ms, ProtoScreenBuffer.CreateProtoScreenBuffer (buffer));
然后我从ms对象得到一个字节数组:
ms.ToArray();
然后将此字节数组放入ASF。 最大的问题是在我的C ++应用程序上,该应用程序很好地读取了ASF示例,当我尝试对其进行反序列化时,我遇到了内存访问冲突:(
这是我的C ++代码:
m_screenBuffer.ParseFromArray(serBuffer, dwInputDataLen);
(其中m_screenBuffer是ProtoScreenBuffer,serBuffer是我从ASF文件获得的原始字节数组,而dwInputDataLen是它的长度。)
我在这里做的事情是否有误,因为我想做的事情(在C#.NET中序列化,在C ++中反序列化?)
非常感谢。
Roey
嗯……我唯一可能会感到凌乱的是Guid
(我最近意识到,我对此的编码似乎是疯狂的字节序)。 因此,我认为应该可以正常工作,给出或采用一些混乱的代码来解密Guid
。
为了排除编码错误,我建议的是:
然后:
那应该表明它是编码,还是传递错误的内存地址或类似的东西。
此外-检查你不使用GetBuffer()
或者至少,如果你使用GetBuffer()
请确保您使用.Length
从MemoryStream
,而不是从过大byte[]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.