Tool dedicated to isohacking for Xenosaga on Playstation 2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.5 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace Hack.Xenosaga.Common
  8. {
  9. public static class Extension
  10. {
  11. /// <summary>
  12. /// Ecrit un bloc d'octet dans le flux actuel en utilisant des données lues dans une mémoire tampon (la position du flux actuel reste inchangée).
  13. /// </summary>
  14. /// <param name="buffer">Mémoire tamon dans laquelle lire les données</param>
  15. /// <param name="offset">Dans buffer, offset d'octet de base zéro d'où commencer la copie des octets dans le flux actuel</param>
  16. /// <param name="count">Nombre maximal d'octets à écrire</param>
  17. /// <param name="position">Position dans le flux actuel où écrire les données</param>
  18. public static void Write(this MemoryStream ms, byte[] buffer, int offset, int count, long position)
  19. {
  20. long pos = ms.Position;
  21. ms.Position = position;
  22. ms.Write(buffer, offset, count);
  23. ms.Position = pos;
  24. }
  25. /// <summary>
  26. /// Lit une séquence de 4 octets à partir du flux actuel et avance la position dans le flux du nombre d'octets lus.
  27. /// </summary>
  28. /// <returns>Valeur lue</returns>
  29. public static UInt32 Read(this MemoryStream ms)
  30. {
  31. UInt32 value = 0;
  32. for (int i = 0; i < 4; i++)
  33. value += (UInt32)(ms.ReadByte() << (i * 8) );
  34. return value;
  35. }
  36. }
  37. }