Swap() public static method

public static Swap ( byte bytes ) : byte[]
bytes byte
return byte[]
示例#1
0
 public static byte[] MaybeSwap(byte[] val, bool isbe)
 {
     if ((BitConverter.IsLittleEndian && isbe) ||
         (!BitConverter.IsLittleEndian && !isbe))
     {
         return(Utility.Swap(val));
     }
     else
     {
         return(val);
     }
 }
        private static void WriteHeader(BinaryWriter writer, int trackCount)
        {
            // number of track entries in the file
            writer.Write((byte)0x00);
            writer.Write(Utility.Swap((short)trackCount));

            // unknown (0x010600)
            writer.Write((byte)0x01);
            writer.Write((byte)0x06);
            writer.Write((byte)0x00);

            // size of header (0x000012, 18 byte header)
            writer.Write((byte)0x00);
            writer.Write((byte)0x00);
            writer.Write((byte)0x12);

            // 9 bytes of 0 padding?
            writer.Write(new byte [9]);
        }
        private static void WriteTrackEntry(BinaryWriter writer, Device device,
                                            Track track)
        {
            // size of entry
            writer.Write((byte)0x00);
            writer.Write(Utility.Swap((short)0x022e));

            // unknown (0x5aa501)
            writer.Write((byte)0x5a);
            writer.Write((byte)0xa5);
            writer.Write((byte)0x01);

            // start time in 256ms increments (60 seconds = 0xea)
            writer.Write(new byte [3]);
            // unknown (always 0?)
            writer.Write(new byte [3]);
            // unknown, assoc. with start time
            writer.Write(new byte [3]);

            // stop time in 256ms increments (60 seconds = 0xea)
            writer.Write(new byte [3]);
            // unknown (always 0?)
            writer.Write(new byte [3]);
            // unknown, assoc. with stop time
            writer.Write(new byte [3]);

            // volume (-100 to 0 to 100)
            writer.Write((byte)0x00);
            writer.Write(Utility.Swap((short)0x0064));

            // file type (0x01 = MP3, 0x02 = AAC, 0x04 = WAV)
            writer.Write(new byte [2]);
            switch (track.Record.Type)
            {
            case TrackRecordType.MP3:
                writer.Write((byte)0x01);
                break;

            case TrackRecordType.AAC:
            default:
                writer.Write((byte)0x02);
                break;
            }

            // unknown (0x000200)
            writer.Write((byte)0x00);
            writer.Write((byte)0x02);
            writer.Write((byte)0x00);

            // file name (UTF-16, record is 522 bytes)
            string file = track.FileName;

            if (file.StartsWith(device.VolumeInfo.MountPoint))
            {
                file = file.Substring(device.VolumeInfo.MountPoint.Length);
            }

            byte [] filebytes = Encoding.Unicode.GetBytes(file);
            writer.Write(filebytes);
            writer.Write(new byte [522 - filebytes.Length]);

            // shuffle flag (0x00 to disable playback in shuffle mode)
            writer.Write((byte)0x01);

            // bookmark flag (0x00 to disable)
            writer.Write((byte)0x00);

            // unknown, always 0?
            writer.Write((byte)0x00);
        }
示例#4
0
        public override void Save(BinaryWriter writer)
        {
            byte[] childBytes;
            int    childLen;
            int    childPadding;

            switch (Type)
            {
            case PhotoDetailType.ThumbnailContainer:
            case PhotoDetailType.ImageContainer:
                SaveChild(ImageName, out childBytes, out childLen);
                break;

            case PhotoDetailType.FileName:
                childBytes = Encoding.Unicode.GetBytes(Value);
                childLen   = 12 + childBytes.Length;
                break;

            case PhotoDetailType.String:
                childBytes = Encoding.UTF8.GetBytes(Value);
                childLen   = 12 + childBytes.Length;
                break;

            default:
                throw new DatabaseWriteException("Unknown detail type: " + Type);
            }

            childPadding = 0;

            if (Type == PhotoDetailType.FileName || Type == PhotoDetailType.String)
            {
                childPadding = 4 - (16 + recordPadding + childLen) % 4;
            }

            WriteName(writer);
            writer.Write(16 + recordPadding);
            writer.Write(16 + recordPadding + childLen + childPadding);
            writer.Write((short)Type);

            if (BrokenChildPadding)
            {
                writer.Write(Utility.Swap((short)childPadding));
            }
            else
            {
                writer.Write((short)childPadding);
            }

            WritePadding(writer);

            switch (Type)
            {
            case PhotoDetailType.ThumbnailContainer:
            case PhotoDetailType.ImageContainer:
                writer.Write(childBytes, 0, childLen);
                break;

            case PhotoDetailType.FileName:
                WriteString(writer, childBytes, childPadding, true);
                break;

            case PhotoDetailType.String:
                WriteString(writer, childBytes, childPadding, false);
                break;

            default:
                throw new DatabaseWriteException("Unknown detail type: " + Type);
            }
        }