Ejemplo n.º 1
0
 public object ReadExt(uint length, FormatReader reader)
 {
     // Timestamp 32
     if (length == 4)
     {
         return(epoch.AddSeconds(reader.ReadUInt32()).ToLocalTime());
     }
     // Timestamp 64
     if (length == 8)
     {
         byte[] buffer      = reader.ReadBytesOfLength(8);
         uint   nanoseconds = ((uint)buffer[0] << 22) | ((uint)buffer[1] << 14) | ((uint)buffer[2] << 6) | (uint)buffer[3] >> 2;
         ulong  seconds     = ((ulong)(buffer[3] & 0x3) << 32) | ((ulong)buffer[4] << 24) | ((ulong)buffer[5] << 16) | ((ulong)buffer[6] << 8) | (ulong)buffer[7];
         return(epoch.AddTicks(nanoseconds / 100).AddSeconds(seconds).ToLocalTime());
     }
     // Timestamp 96
     if (length == 12)
     {
         return(epoch.AddTicks(reader.ReadUInt32() / 100).AddSeconds(reader.ReadInt64()).ToLocalTime());
     }
     throw new FormatException();
 }