Пример #1
0
        public static Tuple <DateTime, IEnumerable <dynamic> > Parse(byte[] data, ArchiveType archiveType)
        {
            if (data.Length < 15)
            {
                return(null);
            }
            var cField = data[0];

            if (cField != 0x08 && cField != 0x18 && cField != 0x28 && cField != 0x38)
            {
                return(null);
            }

            var ciField = data[2];

            if (ciField != 0x72 && ciField != 0x76)
            {
                return(null);
            }
            //первые 12 байт - заголовок. Пропускаем его, там нет ничего интересного

            int currentIndex = 15;
            var records      = new List <VariableDataBlock>();

            while (true)
            {
                var vdb = VariableDataBlock.Parse(data, currentIndex);
                if (vdb == null)
                {
                    break;
                }
                records.Add(vdb);

                currentIndex += vdb.Length;
                if (currentIndex >= data.Length)
                {
                    break;
                }
            }

            return(ConvertToData(records, archiveType));
        }
Пример #2
0
        public static VariableDataBlock Parse(byte[] data, int index)
        {
            if (data == null)
            {
                return(null);
            }

            var drh = DataRecordHeader.Parse(data, index);

            if (drh == null)
            {
                return(null);
            }

            var result = new VariableDataBlock {
                Drh = drh
            };

            result.ParseValue(data, index + drh.Length);
            return(result);
        }