Search code examples
c#integerendianness

C# Big-endian ulong from 4 bytes


Im trying to cast a 4 byte array to an ulong in C#. I'm currently using this code:

atomSize = BitConverter.ToUInt32(buffer, 0);

The byte[4] contains this:

0 0 0 32

However, the bytes are Big-Endian. Is there a simple way to convert this Big-Endian ulong to a Little-Endian ulong?


Solution

  • I believe that the EndianBitConverter in Jon Skeet's MiscUtil library (nuget link) can do what you want.

    You could also swap the bits using bit shift operations:

    uint swapEndianness(uint x)
    {
        return ((x & 0x000000ff) << 24) +  // First byte
               ((x & 0x0000ff00) << 8) +   // Second byte
               ((x & 0x00ff0000) >> 8) +   // Third byte
               ((x & 0xff000000) >> 24);   // Fourth byte
    }
    

    Usage:

    atomSize = BitConverter.ToUInt32(buffer, 0);
    atomSize = swapEndianness(atomSize);