public static int Read(byte[] buf, int c, AverageWind w)
        {
            w.MessageVersionNumber = buf[c++];
            w.Time = new DateTime(1970, 1, 1).AddMilliseconds(BitConverter.ToUInt64(
                new byte[] { buf[c++], buf[c++], buf[c++], buf[c++], buf[c++], buf[c++], 0, 0 }, 0));

            w.RawPeriod = TimeSpan.FromSeconds(BitConverter.ToUInt16(buf, c) / 10.0f); // 1/10ths of seconds to TimeSpan
            c += 2;
            w.RawSpeed = BitConverter.ToUInt16(buf, c) / 1000.0f; // mm/s -> m/s
            c += 2;

            w.Period2 = TimeSpan.FromSeconds(BitConverter.ToUInt16(buf, c) / 10.0f); // 1/10ths of seconds to TimeSpan
            c += 2;
            w.Speed2 = BitConverter.ToUInt16(buf, c) / 1000.0f; // mm/s -> m/s
            c += 2;

            w.Period3 = TimeSpan.FromSeconds(BitConverter.ToUInt16(buf, c) / 10.0f); // 1/10ths of seconds to TimeSpan
            c += 2;
            w.Speed3 = BitConverter.ToUInt16(buf, c) / 1000.0f; // mm/s -> m/s
            c += 2;

            w.Period4 = TimeSpan.FromSeconds(BitConverter.ToUInt16(buf, c) / 10.0f); // 1/10ths of seconds to TimeSpan
            c += 2;
            w.Speed4 = BitConverter.ToUInt16(buf, c) / 1000.0f; // mm/s -> m/s
            c += 2;

            return c;
        }
 public static AverageWind Read(byte[] buf)
 {
     var w = new AverageWind();
     Read(buf, 0, w);
     return w;
 }