using System; using System.IO; namespace SharpCompress.Compressors.Xz { public static class BinaryUtils { public static int ReadLittleEndianInt32(this BinaryReader reader) { byte[] bytes = reader.ReadBytes(4); return (bytes[0] + (bytes[1] << 8) + (bytes[2] << 16) + (bytes[3] << 24)); } internal static uint ReadLittleEndianUInt32(this BinaryReader reader) { return unchecked((uint)ReadLittleEndianInt32(reader)); } public static int ReadLittleEndianInt32(this Stream stream) { byte[] bytes = new byte[4]; var read = stream.ReadFully(bytes); if (!read) { throw new EndOfStreamException(); } return (bytes[0] + (bytes[1] << 8) + (bytes[2] << 16) + (bytes[3] << 24)); } internal static uint ReadLittleEndianUInt32(this Stream stream) { return unchecked((uint)ReadLittleEndianInt32(stream)); } internal static byte[] ToBigEndianBytes(this uint uint32) { var result = BitConverter.GetBytes(uint32); if (BitConverter.IsLittleEndian) Array.Reverse(result); return result; } internal static byte[] ToLittleEndianBytes(this uint uint32) { var result = BitConverter.GetBytes(uint32); if (!BitConverter.IsLittleEndian) Array.Reverse(result); return result; } } }