public static Tuple <DateTime, IEnumerable <Data> > Parse(byte[] data) { 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)); }
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); }