internal static FlightDataHeader Parse(byte[] bytes, FlightBinaryDataHeaderDefinition definition) { FlightDataHeader header = new FlightDataHeader(); string testVal = new string(System.Text.Encoding.GetEncoding("ASCII").GetChars(bytes)); System.Diagnostics.Debug.WriteLine(testVal); List<FlightDataContentSegment> segments = new List<FlightDataContentSegment>(); int current = 0; foreach (var seg in definition.Segments) { if (seg.SegmentName == "(NULL)") { current = seg.BytesCount; continue; } int step = seg.BytesCount; StringBuilder builder = new StringBuilder(); List<byte> bts = new List<byte>(); for (int i = current; i < current + step; i++) { if (i >= bytes.Length) break; bts.Add(bytes[i]); //builder.Append(bytes[i]); } if (bts.Count > 0) //builder.Length > 0) { FlightDataContentSegment ds = new FlightDataContentSegment(); if (seg.DataTypeStr == DataTypeConverter.LONG) { } else if (seg.DataTypeStr == DataTypeConverter.FLOAT) { } else if (seg.DataTypeStr == DataTypeConverter.INT32) { string v = new string(System.Text.Encoding.GetEncoding("ASCII").GetChars(bts.ToArray())); builder.Append(v); // FlightDataContentSegment ds = new FlightDataContentSegment(); ds.DataTypeStr = seg.DataTypeStr; ds.SegmentName = seg.SegmentName; ds.Value = 0;//debug //builder.ToString().Trim('\0'); } else { string v = new string(System.Text.Encoding.GetEncoding("ASCII").GetChars(bts.ToArray())); builder.Append(v); ds.DataTypeStr = seg.DataTypeStr; ds.SegmentName = seg.SegmentName; ds.Value = 0;//debug builder.ToString().Trim('\0'); } segments.Add(ds); } current += step; } return header; }
private FlightDataHeader DoReadHeaderCore() { FlightDataHeader header = new FlightDataHeader(); List<FlightDataContentSegment> segments = new List<FlightDataContentSegment>(); m_Reader.BaseStream.Position = 0; foreach (var seg in this.Definition.HeaderDefinition.Segments) { FlightDataContentSegment content = new FlightDataContentSegment() { DataTypeStr = seg.DataTypeStr, SegmentName = seg.SegmentName }; if (seg.DataTypeStr == DataTypeConverter.FLOAT) { float floatVal = m_Reader.ReadSingle(); content.Value = floatVal;// floatVal.ToString(); } else if (seg.DataTypeStr == DataTypeConverter.INT32) { int intVal = m_Reader.ReadInt32(); content.Value = intVal;// intVal.ToString(); } else if (seg.DataTypeStr == DataTypeConverter.LONG) { long longVal = m_Reader.ReadInt64(); content.Value = longVal;// longVal.ToString(); } else if (seg.DataTypeStr == DataTypeConverter.DATETIME) { content.Value = 0;// string.Empty; } else { byte[] strs = m_Reader.ReadBytes(seg.BytesCount); content.Value = 0;// new string(System.Text.Encoding.GetEncoding("ASCII").GetChars(strs)); } segments.Add(content); } m_Reader.BaseStream.Position = this.Definition.HeaderDefinition.BytesCount; header.Segments = segments.ToArray(); return header; }