package com.inet.gradle.setup.image.image4j.io;
/**
* Provides utility methods for endian conversions [big-endian to little-endian; little-endian to big-endian].
* @author Ian McDonagh
*/
public class EndianUtils {
/**
* Reverses the byte order of the source <tt>short</tt> value
* @param value the source value
* @return the converted value
*/
public static short swapShort(short value) {
return
(short) (
((value & 0xFF00) >> 8)
| ((value & 0x00FF) << 8)
)
;
}
/**
* Reverses the byte order of the source <tt>int</tt> value
* @param value the source value
* @return the converted value
*/
public static int swapInteger(int value) {
return
((value & 0xFF000000) >> 24)
| ((value & 0x00FF0000) >> 8)
| ((value & 0x0000FF00) << 8)
| ((value & 0x000000FF) << 24)
;
}
/**
* Reverses the byte order of the source <tt>long</tt> value
* @param value the source value
* @return the converted value
*/
public static long swapLong(long value) {
return
((value & 0xFF00000000000000L) >> 56)
| ((value & 0x00FF000000000000L) >> 40)
| ((value & 0x0000FF0000000000L) >> 24)
| ((value & 0x000000FF00000000L) >> 8)
| ((value & 0x00000000FF000000L) << 8)
| ((value & 0x0000000000FF0000L) << 24)
| ((value & 0x000000000000FF00L) << 40)
| ((value & 0x00000000000000FFL) << 56)
;
}
/**
* Reverses the byte order of the source <tt>float</tt> value
* @param value the source value
* @return the converted value
*/
public static float swapFloat(float value) {
int i = Float.floatToIntBits(value);
i = swapInteger(i);
return Float.intBitsToFloat(i);
}
/**
* Reverses the byte order of the source <tt>double</tt> value
* @param value the source value
* @return the converted value
*/
public static double swapDouble(double value) {
long l = Double.doubleToLongBits(value);
l = swapLong(l);
return Double.longBitsToDouble(l);
}
}