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?
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);