Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
        }