public static int Read(byte[] buf, int c, MessageHeader msg) { if (buf[c] != 0x47 || buf[c + 1] != 0x83) return c; c += 2; msg.Type = (MessageTypeEnum)buf[c++]; var ts = new byte[] { buf[c++], buf[c++], buf[c++], buf[c++], buf[c++], buf[c++], 0, 0 }; var ticks = BitConverter.ToInt64(ts, 0); msg.TimeStamp = new DateTime(1970, 1, 1).AddMilliseconds(ticks); var si = new byte[] { buf[c++], buf[c++], buf[c++], buf[c++] }; msg.SourceId = BitConverter.ToUInt32(si, 0); var ml = new byte[] { buf[c++], buf[c++] }; msg.MessageLength = BitConverter.ToUInt16(ml, 0); return c; }