public static SonyTag?DecodeSonyTag(byte[] tag) { if (tag == null || tag.Length != 12) { return(null); } SonyTag snTag = new SonyTag(); BigEndianBitConverter.IsLittleEndian = BitConverter.IsLittleEndian; snTag.Version = BigEndianBitConverter.ToUInt16(tag, 0); snTag.Kind = (byte)((tag[2] & 0xC0) >> 6); snTag.Reserved = (byte)(tag[2] & 0x3F); snTag.Volume = tag[3]; snTag.FileId = BigEndianBitConverter.ToInt16(tag, 4); snTag.RelPage = BigEndianBitConverter.ToUInt16(tag, 6); snTag.NextBlock = (ushort)(BigEndianBitConverter.ToUInt16(tag, 8) & 0x7FF); snTag.PrevBlock = (ushort)(BigEndianBitConverter.ToUInt16(tag, 10) & 0x7FF); snTag.IsLast = snTag.NextBlock == 0x7FF; snTag.IsFirst = snTag.PrevBlock == 0x7FF; return(snTag); }
/// <summary>Decodes tag from a 3.5" Sony micro-floppy</summary> /// <param name="tag">Byte array containing raw tag data</param> /// <returns>Decoded tag in Sony's format</returns> public static SonyTag?DecodeSonyTag(byte[] tag) { if (tag == null || tag.Length != 12) { return(null); } var snTag = new SonyTag { Version = BigEndianBitConverter.ToUInt16(tag, 0), Kind = (byte)((tag[2] & 0xC0) >> 6), Reserved = (byte)(tag[2] & 0x3F), Volume = tag[3], FileId = BigEndianBitConverter.ToInt16(tag, 4), RelPage = BigEndianBitConverter.ToUInt16(tag, 6), NextBlock = (ushort)(BigEndianBitConverter.ToUInt16(tag, 8) & 0x7FF), PrevBlock = (ushort)(BigEndianBitConverter.ToUInt16(tag, 10) & 0x7FF) }; snTag.IsLast = snTag.NextBlock == 0x7FF; snTag.IsFirst = snTag.PrevBlock == 0x7FF; return(snTag); }