繁体   English   中英

protobuf-net-在C ++端反序列化的问题:(

[英]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

为了排除编码错误,我建议的是:

  • 通过C#将数据序列化到文件中(或仅在调试器中查看屏幕上的字节)
  • 通过C ++将/ same /数据序列化到文件中(或仅在调试器中查看屏幕上的字节)

然后:

  • 比较字节
  • 检查长度是否符合您的期望(即您经过的电话号码)

那应该表明它是编码,还是传递错误的内存地址或类似的东西。

此外-检查你不使用GetBuffer()或者至少,如果使用GetBuffer()请确保您使用.LengthMemoryStream ,而不是从过大byte[]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM