簡體   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