2016-11-27 6 views
2

deserialze ich wissen möchte, wie kann ich eine Klasse für eine Binär-Datei definieren, welche Objekte mit Float Array der Größe enthält 19Wie kann ich eine Klasse definieren Binärdatei

bitte das beigefügte Bild davon, wie Daten sehen Sieht aus wie in Hex Editor Neo. wenn sie als Schwimmer angezeigt

enter image description here

Ich habe versucht folgende aber kein Glück. Bitte sag mir, was ich hier falsch mache.

[ProtoContract] 
public class ChannelData 
{ 
    [ProtoMember(1)] 
    public List<float> array = new List<float>(19); 
} 

using (var file = File.OpenRead("0.cnl")) 
{ 
    ChannelData newchannel = Serializer.Deserialize<ChannelData>(file); 
} 

Ich verwende protobuff für deserialize. Vielen Dank!

diese Binärdatei wird nicht serialisiert, indem sie ihre rohe Datei mit einem binären Serialisierer verwendet. Also ich denke, es kann nicht mit einem Deserializer deserialize sein? Möglicherweise müssen Sie werden mit BitConverter zu tun, haben aber keine Ahnung ..

+0

sollte es nicht sein '[ProtoMember (0)] '? – NtFreX

+0

oh may bad eigentlich ich gerade gefunden thats binäre Datei ist nicht serialisiert mit einem binären Serializer hat es keine Attribute. Also ich denke, es kann nicht mit einem Deserializer deserialize sein? möglicherweise mit BitConverter zu tun haben, aber keine Ahnung haben ... :( – user964829

+0

soweit mein Verständnis der Protokollpuffer geht ich verstanden, dass keine Attribute in die Datei geschrieben werden und dass der Serializer/Deserializer das Format/der Bitkonverter kennen muss ist nur für einzelne Datentypen Serialisierung und Deserialisierung .. Sie müssen multiplizieren – NtFreX

Antwort

0

Sie schwimmt in die Liste laden können, teilen Sie es dann Kanäle, wie

public static unsafe List<float> LoadToList(byte[] bytes) 
    { 
     var list = new List<float>(); 
     var step = sizeof (float); 
     for (int i = 0; i < bytes.Length; i += step) 
     { 
      fixed (byte* pbyte = &bytes[i]) 
      { 
       list.Add(*((float*)pbyte)); 
      } 
     } 

     return list; 
    } 
+0

enthalten perfekt das ist genau das was ich gesucht habe danke. – user964829

Verwandte Themen