/// <summary> /// Read a 24bit integer from the stream with a specified endian /// </summary> /// <param name="littleEndian">True for little endian, false for big endian</param> /// <returns>The 24bit integer</returns> public Int24 ReadInt24(bool littleEndian) { int ofs = littleEndian ? 0 : 1; byte[] data = new byte[4]; for (int i = 0; i < 3; ++i) { data[i + ofs] = ReadByte(); } // Sign the value if (littleEndian) { if ((data[2] & 0x80) != 0) { data[3] = 0xFF; } } else { if ((data[1] & 0x80) != 0) { data[0] = 0xFF; } } return((Int24)BitConverter.ToInt32(GeneralUtils.SwapBytes(data, littleEndian), 0)); }
/// <summary> /// Write a 24bit unsigned integer /// </summary> /// <param name="i">The integer to write</param> /// <param name="littleEndian">True for little endian, otherwise big endian</param> public void WriteUInt24(UInt24 i, bool littleEndian) { byte[] data = GeneralUtils.SwapBytes(BitConverter.GetBytes(i), littleEndian); if (littleEndian) { WriteBytes(data, 0, 3); } else { WriteBytes(data, 1, 3); } }
/// <summary> /// Read a 24bit integer from the stream with a specified endian /// </summary> /// <param name="littleEndian">True for little endian, false for big endian</param> /// <returns>The 24bit unsigned integer</returns> public UInt24 ReadUInt24(bool littleEndian) { int ofs = littleEndian ? 0 : 1; byte[] data = new byte[4]; for (int i = 0; i < 3; ++i) { data[i + ofs] = ReadByte(); } return((UInt24)BitConverter.ToUInt32(GeneralUtils.SwapBytes(data, littleEndian), 0)); }
/// <summary> /// Write a double with a specified endian /// </summary> /// <param name="d">The double to write</param> /// <param name="littleEndian">True for little endian, otherwise big endian</param> public void WriteDouble(double d, bool littleEndian) { WriteBytes(GeneralUtils.SwapBytes(BitConverter.GetBytes(d), littleEndian)); }
/// <summary> /// Write a float with a specified endian /// </summary> /// <param name="f">The float to write</param> /// <param name="littleEndian">True for little endian, otherwise big endian</param> public void WriteFloat(float f, bool littleEndian) { WriteBytes(GeneralUtils.SwapBytes(BitConverter.GetBytes(f), littleEndian)); }
/// <summary> /// Write an unsigned 64bit integer with a specified endian /// </summary> /// <param name="l">The integer to write</param> /// <param name="littleEndian">True for little endian, otherwise big endian</param> public void WriteUInt64(ulong l, bool littleEndian) { WriteBytes(GeneralUtils.SwapBytes(BitConverter.GetBytes(l), littleEndian)); }
/// <summary> /// Write an unsigned 32bit integer with a specified endian /// </summary> /// <param name="i">The integer to write</param> /// <param name="littleEndian">True for little endian, otherwise big endian</param> public void WriteUInt32(uint i, bool littleEndian) { WriteBytes(GeneralUtils.SwapBytes(BitConverter.GetBytes(i), littleEndian)); }
/// <summary> /// Write a 16bit integer to the stream /// </summary> /// <param name="s">The integer to write</param> /// <param name="littleEndian">True for little endian, otherwise big endian</param> public void WriteUInt16(ushort s, bool littleEndian) { WriteBytes(GeneralUtils.SwapBytes(BitConverter.GetBytes(s), littleEndian)); }
/// <summary> /// Read a double from the stream with a specified endian /// </summary> /// <param name="littleEndian">True for little endian, false for big endian</param> /// <returns>The double</returns> public double ReadDouble(bool littleEndian) { byte[] data = ReadBytes(8); return(BitConverter.ToDouble(GeneralUtils.SwapBytes(data, littleEndian), 0)); }
/// <summary> /// Read a float from the stream with a specified endian /// </summary> /// <param name="littleEndian">True for little endian, false for big endian</param> /// <returns>The float</returns> public float ReadFloat(bool littleEndian) { byte[] data = ReadBytes(4); return(BitConverter.ToSingle(GeneralUtils.SwapBytes(data, littleEndian), 0)); }
/// <summary> /// Read a long from the stream with a specified endian /// </summary> /// <param name="littleEndian">True for little endian, false for big endian</param> /// <returns>The read value</returns> public long ReadInt64(bool littleEndian) { byte[] data = ReadBytes(8); return(BitConverter.ToInt64(GeneralUtils.SwapBytes(data, littleEndian), 0)); }
/// <summary> /// Read an unsigned integer from the stream with a specified endian /// </summary> /// <param name="littleEndian">True for little endian, false for big endian</param> /// <returns>The read value</returns> public uint ReadUInt32(bool littleEndian) { byte[] data = ReadBytes(4); return(BitConverter.ToUInt32(GeneralUtils.SwapBytes(data, littleEndian), 0)); }
/// <summary> /// Read an unsigned short from the stream with a specified endian /// </summary> /// <param name="littleEndian">True for little endian, false for big endian</param> /// <returns>The read value</returns> public ushort ReadUInt16(bool littleEndian) { byte[] data = ReadBytes(2); return(BitConverter.ToUInt16(GeneralUtils.SwapBytes(data, littleEndian), 0)); }