EndianSwap.cs 821 B

12345678910111213141516171819202122232425262728293031
  1. using System;
  2. namespace Ryujinx.Common
  3. {
  4. public static class EndianSwap
  5. {
  6. public static ushort Swap16(ushort value) => (ushort)(((value >> 8) & 0xff) | (value << 8));
  7. public static int Swap32(int value)
  8. {
  9. uint uintVal = (uint)value;
  10. return (int)(((uintVal >> 24) & 0x000000ff) |
  11. ((uintVal >> 8) & 0x0000ff00) |
  12. ((uintVal << 8) & 0x00ff0000) |
  13. ((uintVal << 24) & 0xff000000));
  14. }
  15. public static uint FromBigEndianToPlatformEndian(uint value)
  16. {
  17. uint result = value;
  18. if (BitConverter.IsLittleEndian)
  19. {
  20. result = (uint)EndianSwap.Swap32((int)result);
  21. }
  22. return result;
  23. }
  24. }
  25. }