public static SFEntryInfo FromBytes(byte[] rawData) { if (rawData.Length != 32) { throw new NotSupportedException(); } var result = null as SFEntryInfo; try { using (var stream = new System.IO.MemoryStream(rawData)) { using (var reader = new System.IO.BinaryReader(stream)) { result = new SFEntryInfo(); result.Raw = rawData; result.Region1 = reader.ReadUInt16(); result.Region2 = reader.ReadUInt16(); result.Region3 = reader.ReadUInt16(); result.Region4 = reader.ReadUInt16(); result.TransitionDate = ByteConvert.ToDate(reader.ReadBytes(2)); result.EntryTime = result.TransitionDate.Add(ByteConvert.ToTimeBCD(reader.ReadBytes(2))); result.EntryStationCode = reader.ReadUInt16(); reader.ReadByte(); result.ExitTime = result.TransitionDate.Add(ByteConvert.ToTimeBCD(reader.ReadBytes(2))); result.ExitStationCode = reader.ReadUInt16(); reader.ReadByte(); var bC = reader.ReadByte(); result.RegionCode = (byte)((bC & 0b11000000) >> 6); } } } catch { } return(result); }
public static TimeSpan ToTimeBCD(byte[] bytes) { if (bytes.Length != 2) { throw new NotSupportedException(); } var origin = ByteConvert.ToUint16(bytes, false); var hh = ByteConvert.FromBCD((byte)((origin & 0xFF00) >> 8)); var mm = ByteConvert.FromBCD((byte)(origin & 0x00FF)); try { return(new TimeSpan(hh, mm, 0)); } catch { } return(TimeSpan.MinValue); }
public static DateTime ToDate(byte[] bytes) { if (bytes.Length != 2) { throw new NotSupportedException(); } var origin = ByteConvert.ToUint16(bytes, false); var YY = (int)(origin & 0xFE00) >> 9; var MM = (int)(origin & 0x01E0) >> 5; var DD = (int)(origin & 0x001F) >> 0; try { return(new DateTime(YY, MM, DD)); } catch { } return(DateTime.MinValue); }
public static GateHistoryInfo FromBytes(byte[] rawData) { if (rawData.Length != 16) { throw new NotSupportedException(); } var result = null as GateHistoryInfo; try { using (var stream = new System.IO.MemoryStream(rawData)) { using (var reader = new System.IO.BinaryReader(stream)) { result = new GateHistoryInfo(); result.Raw = rawData; var b0 = reader.ReadByte(); result.IsEnterance = ((b0 & 0b10000000) > 0); result.EntryType1 = (byte)((b0 & 0b01110000) >> 4); result.EntryType2 = (byte)((b0 & 0b00001111) >> 0); var b1 = reader.ReadByte(); result.TransitType = b1; var b23 = reader.ReadUInt16(); result.StationCode = (byte)((b23 & 0xFF00) >> 8); result.LineCode = (byte)(b23 & 0xFF); result.BusCode = b23; var b45 = reader.ReadUInt16(); result.GateCode = result.BusId = b45; var b6789 = reader.ReadBytes(4); result.DateTime = ByteConvert.ToDateTimeBCD(b6789); var bAB = reader.ReadUInt16(); result.Payment = bAB; var bCD = reader.ReadBytes(2); var bEF = reader.ReadUInt16(); result.BusStopCode = bEF; } } } catch { } return(result); }
public static DateTime ToDateTimeBCD(byte[] bytes) { if (bytes.Length != 4) { throw new NotSupportedException(); } var origin = ByteConvert.ToUint32(bytes, false); var YY = (int)(origin & 0xFE000000) >> 25; var MM = (int)(origin & 0x01E00000) >> 21; var DD = (int)(origin & 0x001F0000) >> 16; var hh = ByteConvert.FromBCD((byte)((origin & 0x0000FF00) >> 8)); var mm = ByteConvert.FromBCD((byte)(origin & 0x000000FF)); try { return(new DateTime(YY, MM, DD, hh, mm, 0)); } catch { } return(DateTime.MinValue); }