| | |
| | | import java.nio.ByteOrder; |
| | | import java.nio.LongBuffer; |
| | | |
| | | import org.testng.Assert; |
| | | |
| | | /** |
| | | * BinConverter |
| | | * User: Ulysses |
| | |
| | | { |
| | | // our table for binhex conversion |
| | | final static char[] HEXTAB = |
| | | { |
| | | '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' |
| | | }; |
| | | { |
| | | '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' |
| | | }; |
| | | |
| | | /** |
| | | * gets bytes from an array into a long |
| | | * @param buffer where to get the bytes |
| | | * @param nStartIndex index from where to read the data |
| | | * @return the 64bit integer |
| | | * gets bytes from an array into a long |
| | | * |
| | | * @param buffer where to get the bytes |
| | | * @param nStartIndex index from where to read the data |
| | | * @return the 64bit integer |
| | | */ |
| | | public static long byteArrayToLong(byte[] buffer, int nStartIndex) |
| | | { |
| | | return (((long) buffer[nStartIndex]) << 56) | (((long) buffer[nStartIndex + 1] & 0x0ffL) << 48) |
| | | | (((long) buffer[nStartIndex + 2] & 0x0ffL) << 40) | (((long) buffer[nStartIndex + 3] & 0x0ffL) << 32) |
| | | | (((long) buffer[nStartIndex + 4] & 0x0ffL) << 24) | (((long) buffer[nStartIndex + 5] & 0x0ffL) << 16) |
| | | | (((long) buffer[nStartIndex + 6] & 0x0ffL) << 8) | ((long) buffer[nStartIndex + 7] & 0x0ff); |
| | | | (((long) buffer[nStartIndex + 2] & 0x0ffL) << 40) | (((long) buffer[nStartIndex + 3] & 0x0ffL) << 32) |
| | | | (((long) buffer[nStartIndex + 4] & 0x0ffL) << 24) | (((long) buffer[nStartIndex + 5] & 0x0ffL) << 16) |
| | | | (((long) buffer[nStartIndex + 6] & 0x0ffL) << 8) | ((long) buffer[nStartIndex + 7] & 0x0ff); |
| | | } |
| | | |
| | | /** |
| | | * converts a long o bytes which are put into a given array |
| | | * @param lValue the 64bit integer to convert |
| | | * @param buffer the target buffer |
| | | * @param nStartIndex where to place the bytes in the buffer |
| | | * converts a long o bytes which are put into a given array |
| | | * |
| | | * @param lValue the 64bit integer to convert |
| | | * @param buffer the target buffer |
| | | * @param nStartIndex where to place the bytes in the buffer |
| | | */ |
| | | public static void longToByteArray(long lValue, byte[] buffer, int nStartIndex) |
| | | { |
| | | buffer[nStartIndex] = (byte) (lValue >>> 56); |
| | | buffer[nStartIndex] = (byte) (lValue >>> 56); |
| | | buffer[nStartIndex + 1] = (byte) ((lValue >>> 48) & 0x0ff); |
| | | buffer[nStartIndex + 2] = (byte) ((lValue >>> 40) & 0x0ff); |
| | | buffer[nStartIndex + 3] = (byte) ((lValue >>> 32) & 0x0ff); |
| | |
| | | } |
| | | |
| | | /** |
| | | * converts values from an integer array to a long |
| | | * @param buffer where to get the bytes |
| | | * @param nStartIndex index from where to read the data |
| | | * @return the 64bit integer |
| | | * converts values from an integer array to a long |
| | | * |
| | | * @param buffer where to get the bytes |
| | | * @param nStartIndex index from where to read the data |
| | | * @return the 64bit integer |
| | | */ |
| | | public static long intArrayToLong(int[] buffer, int nStartIndex) |
| | | { |
| | |
| | | } |
| | | |
| | | /** |
| | | * converts a long to integers which are put into a given array |
| | | * @param lValue the 64bit integer to convert |
| | | * @param buffer the target buffer |
| | | * @param nStartIndex where to place the bytes in the buffer |
| | | * converts a long to integers which are put into a given array |
| | | * |
| | | * @param lValue the 64bit integer to convert |
| | | * @param buffer the target buffer |
| | | * @param nStartIndex where to place the bytes in the buffer |
| | | */ |
| | | public static void longToIntArray(long lValue, int[] buffer, int nStartIndex) |
| | | { |
| | | buffer[nStartIndex] = (int) (lValue >>> 32); |
| | | buffer[nStartIndex] = (int) (lValue >>> 32); |
| | | buffer[nStartIndex + 1] = (int) lValue; |
| | | } |
| | | |
| | | /** |
| | | * makes a long from two integers (treated unsigned) |
| | | * @param nLo lower 32bits |
| | | * @param nHi higher 32bits |
| | | * @return the built long |
| | | * makes a long from two integers (treated unsigned) |
| | | * |
| | | * @param nLo lower 32bits |
| | | * @param nHi higher 32bits |
| | | * @return the built long |
| | | */ |
| | | public static long makeLong(int nLo, int nHi) |
| | | { |
| | |
| | | } |
| | | |
| | | /** |
| | | * gets the lower 32 bits of a long |
| | | * @param lVal the long integer |
| | | * @return lower 32 bits |
| | | * gets the lower 32 bits of a long |
| | | * |
| | | * @param lVal the long integer |
| | | * @return lower 32 bits |
| | | */ |
| | | public static int longLo32(long lVal) |
| | | { |
| | |
| | | } |
| | | |
| | | /** |
| | | * gets the higher 32 bits of a long |
| | | * @param lVal the long integer |
| | | * @return higher 32 bits |
| | | * gets the higher 32 bits of a long |
| | | * |
| | | * @param lVal the long integer |
| | | * @return higher 32 bits |
| | | */ |
| | | public static int longHi32(long lVal) |
| | | { |
| | |
| | | } |
| | | |
| | | /** |
| | | * converts a byte array to a binhex string |
| | | * @param data the byte array |
| | | * @return the binhex string |
| | | * converts a byte array to a binhex string |
| | | * |
| | | * @param data the byte array |
| | | * @return the binhex string |
| | | */ |
| | | public static String bytesToBinHex(byte[] data) |
| | | { |
| | |
| | | } |
| | | |
| | | /** |
| | | * converts a byte array to a binhex string |
| | | * @param data the byte array |
| | | * @param nStartPos start index where to get the bytes |
| | | * @param nNumOfBytes number of bytes to convert |
| | | * @return the binhex string |
| | | * converts a byte array to a binhex string |
| | | * |
| | | * @param data the byte array |
| | | * @param nStartPos start index where to get the bytes |
| | | * @param nNumOfBytes number of bytes to convert |
| | | * @return the binhex string |
| | | */ |
| | | public static String bytesToBinHex(byte[] data, int nStartPos, int nNumOfBytes) |
| | | { |
| | |
| | | } |
| | | |
| | | /** |
| | | * converts a binhex string back into a byte array (invalid codes will be skipped) |
| | | * @param sBinHex binhex string |
| | | * @param data the target array |
| | | * @param nSrcPos from which character in the string the conversion should begin, |
| | | * remember that (nSrcPos modulo 2) should equals 0 normally |
| | | * @param nDstPos to store the bytes from which position in the array |
| | | * @param nNumOfBytes number of bytes to extract |
| | | * @return number of extracted bytes |
| | | * converts a binhex string back into a byte array (invalid codes will be skipped) |
| | | * |
| | | * @param sBinHex binhex string |
| | | * @param data the target array |
| | | * @param nSrcPos from which character in the string the conversion should begin, |
| | | * remember that (nSrcPos modulo 2) should equals 0 normally |
| | | * @param nDstPos to store the bytes from which position in the array |
| | | * @param nNumOfBytes number of bytes to extract |
| | | * @return number of extracted bytes |
| | | */ |
| | | public static int binHexToBytes(String sBinHex, byte[] data, int nSrcPos, int nDstPos, int nNumOfBytes) |
| | | { |
| | | // check for correct ranges |
| | | int nStrLen = sBinHex.length(); |
| | | int nStrLen = sBinHex.length(); |
| | | int nAvailBytes = (nStrLen - nSrcPos) >> 1; |
| | | |
| | | if (nAvailBytes < nNumOfBytes) |
| | |
| | | |
| | | for (int nI = 0; nI < nNumOfBytes; nI++) |
| | | { |
| | | byte bActByte = 0; |
| | | byte bActByte = 0; |
| | | boolean blConvertOK = true; |
| | | |
| | | for (int nJ = 0; nJ < 2; nJ++) |
| | |
| | | } |
| | | |
| | | /** |
| | | * converts a byte array into an UNICODE string |
| | | * @param data the byte array |
| | | * @param nStartPos where to begin the conversion |
| | | * @param nNumOfBytes number of bytes to handle |
| | | * @return the string |
| | | * converts a byte array into an UNICODE string |
| | | * |
| | | * @param data the byte array |
| | | * @param nStartPos where to begin the conversion |
| | | * @param nNumOfBytes number of bytes to handle |
| | | * @return the string |
| | | */ |
| | | public static String byteArrayToUNCString(byte[] data, int nStartPos, int nNumOfBytes) |
| | | { |
| | |
| | | while (nNumOfBytes > 0) |
| | | { |
| | | sbuf.setCharAt(nSBufPos++, (char) (((int) data[nStartPos] << 8) | ((int) data[nStartPos + 1] & 0x0ff))); |
| | | nStartPos += 2; |
| | | nStartPos += 2; |
| | | nNumOfBytes -= 2; |
| | | } |
| | | |
| | |
| | | |
| | | public static long[] marshalByteArray(byte[] raws, boolean hasSignature) |
| | | { |
| | | int remainder = raws.length % 8; |
| | | ByteBuffer rawData = ByteBuffer.wrap(raws); |
| | | int remainder = raws.length % 8; |
| | | ByteBuffer rawData = ByteBuffer.wrap(raws); |
| | | |
| | | rawData.rewind(); |
| | | rawData.order(ByteOrder.LITTLE_ENDIAN); |
| | | |
| | | LongBuffer longBuffer = ((ByteBuffer) rawData.rewind()).asLongBuffer(); |
| | | int resultSize = longBuffer.limit() + ((remainder != 0) |
| | | ? 1 |
| | | : 0) + (hasSignature |
| | | ? 1 |
| | | : 0); |
| | | long[] result = new long[resultSize]; |
| | | int i = 0; |
| | | int resultSize = longBuffer.limit() + ((remainder != 0) |
| | | ? 1 |
| | | : 0) + (hasSignature |
| | | ? 1 |
| | | : 0); |
| | | long[] result = new long[resultSize]; |
| | | int i = 0; |
| | | |
| | | if (hasSignature) |
| | | { |
| | |
| | | if (remainder != 0) |
| | | { |
| | | int pos = (i - (hasSignature |
| | | ? 1 |
| | | : 0)) * 8; |
| | | ? 1 |
| | | : 0)) * 8; |
| | | |
| | | // int pos = rawData.position(); |
| | | byte[] temp = new byte[8]; |
| | |
| | | |
| | | public static byte[] unmarshalByteArray(long[] raws, boolean hasSignature) |
| | | { |
| | | LongBuffer longBuffer = LongBuffer.wrap(raws); |
| | | int resultBufferSize = (raws.length - (hasSignature |
| | | ? 1 |
| | | : 0)) * 8; |
| | | int resultSize = resultBufferSize; |
| | | LongBuffer longBuffer = LongBuffer.wrap(raws); |
| | | int resultBufferSize = (raws.length - (hasSignature |
| | | ? 1 |
| | | : 0)) * 8; |
| | | int resultSize = resultBufferSize; |
| | | |
| | | if (hasSignature) |
| | | { |