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;
        }