UnityBinUtils.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using UnityEngine;
  5. using System.Text;
  6. namespace HybridCLR.Editor.GlobalManagers
  7. {
  8. public static class UnityBinUtils
  9. {
  10. public static void SwapUInt(ref uint val)
  11. {
  12. val = (val >> 24) | ((val >> 8) & 0x0000ff00) | ((val << 8) & 0x00ff0000) | (val << 24);
  13. }
  14. public static string ReadRawString(this BinaryReader br)
  15. {
  16. long startPos = br.BaseStream.Position;
  17. while (true)
  18. {
  19. byte val = br.ReadByte();
  20. if(val == 0)
  21. break;
  22. }
  23. int size = (int)(br.BaseStream.Position - startPos);
  24. br.BaseStream.Position = startPos;
  25. byte[] buffer = br.ReadBytes(size);
  26. string ret = Encoding.UTF8.GetString(buffer, 0, size - 1);
  27. return ret;
  28. }
  29. public static void WriteRawString(this BinaryWriter bw, string str)
  30. {
  31. byte[] buffer = Encoding.UTF8.GetBytes(str);
  32. bw.Write(buffer, 0, buffer.Length);
  33. bw.Write((byte)0);
  34. }
  35. public static string ReadSizeString(this BinaryReader br)
  36. {
  37. int size = br.ReadInt32();
  38. byte[] buff = br.ReadBytes(size);
  39. br.BaseStream.AlignOffset4();
  40. string ret = Encoding.UTF8.GetString(buff);
  41. return ret;
  42. }
  43. public static void WriteSizeString(this BinaryWriter bw, string str)
  44. {
  45. byte[] buff = Encoding.UTF8.GetBytes(str);
  46. bw.Write(buff.Length);
  47. bw.Write(buff, 0, buff.Length);
  48. bw.BaseStream.AlignOffset4();
  49. }
  50. public static void AlignOffset4(this Stream stream)
  51. {
  52. int offset = (((int)stream.Position + 3) >> 2) << 2;
  53. stream.Position = offset;
  54. }
  55. public static long AlignedReadInt64(this BinaryReader br)
  56. {
  57. br.BaseStream.AlignOffset4();
  58. return br.ReadInt64();
  59. }
  60. public static void AlignedWriteInt64(this BinaryWriter bw, long val)
  61. {
  62. bw.BaseStream.AlignOffset4();
  63. bw.Write(val);
  64. }
  65. }
  66. }