001 package toolbus.util;
002
003 /**
004 * This class handles the conversion of native types from and to their byte representation.
005 *
006 * @author Arnold Lankamp
007 */
008 public class NativeTypeConverter{
009 private final static int BYTEMASK = 0xFF;
010
011 /**
012 * Default constructor. Made private to prevent instantiation.
013 */
014 private NativeTypeConverter(){
015 super();
016 }
017
018 /**
019 * Merges two (little endian encoded) bytes into a unsigned short value.
020 *
021 * @param shortBytes
022 * The two (little endian encoded) bytes.
023 * @return The resulting short value.
024 */
025 public static int makeUnsignedShort(byte[] shortBytes){
026 return (shortBytes[0] & BYTEMASK) | ((shortBytes[1] & BYTEMASK) << 8);
027 }
028
029 /**
030 * Splits the given unsigned short value into two separate bytes (little endian encoded).
031 *
032 * @param twoByteNumber
033 * The short that needs to be split.
034 * @return Two (little endian encoded) bytes.
035 */
036 public static byte[] makeBytesFromUnsignedShort(int twoByteNumber){
037 byte[] shortBytes = new byte[2];
038
039 shortBytes[0] = (byte) (twoByteNumber);
040 shortBytes[1] = (byte) (twoByteNumber >>> 8);
041
042 return shortBytes;
043 }
044
045 /**
046 * Merges four (little endian encoded) bytes into a int value.
047 *
048 * @param intBytes
049 * The four (little endian encoded) bytes.
050 * @return The resulting int value.
051 */
052 public static int makeInt(byte[] intBytes){
053 return (intBytes[0] & BYTEMASK) | ((intBytes[1] & BYTEMASK) << 8) | ((intBytes[2] & BYTEMASK) << 16) | ((intBytes[3] & BYTEMASK) << 24);
054 }
055
056 /**
057 * Splits the given int value into four separate bytes (little endian encoded).
058 *
059 * @param fourByteNumber
060 * The int that needs to be split.
061 * @return Four (little endian encoded) bytes.
062 */
063 public static byte[] makeBytesFromInt(int fourByteNumber){
064 byte[] intBytes = new byte[4];
065
066 intBytes[0] = (byte) fourByteNumber;
067 intBytes[1] = (byte) (fourByteNumber >>> 8);
068 intBytes[2] = (byte) (fourByteNumber >>> 16);
069 intBytes[3] = (byte) (fourByteNumber >>> 24);
070
071 return intBytes;
072 }
073 }