diff options
Diffstat (limited to 'Ryujinx.Common/Utilities')
| -rw-r--r-- | Ryujinx.Common/Utilities/EndianSwap.cs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/Ryujinx.Common/Utilities/EndianSwap.cs b/Ryujinx.Common/Utilities/EndianSwap.cs new file mode 100644 index 00000000..049570e3 --- /dev/null +++ b/Ryujinx.Common/Utilities/EndianSwap.cs @@ -0,0 +1,31 @@ +using System; + +namespace Ryujinx.Common +{ + public static class EndianSwap + { + public static ushort Swap16(ushort value) => (ushort)(((value >> 8) & 0xff) | (value << 8)); + + public static int Swap32(int value) + { + uint uintVal = (uint)value; + + return (int)(((uintVal >> 24) & 0x000000ff) | + ((uintVal >> 8) & 0x0000ff00) | + ((uintVal << 8) & 0x00ff0000) | + ((uintVal << 24) & 0xff000000)); + } + + public static uint FromBigEndianToPlatformEndian(uint value) + { + uint result = value; + + if (BitConverter.IsLittleEndian) + { + result = (uint)EndianSwap.Swap32((int)result); + } + + return result; + } + } +} |
