68 lines
2.0 KiB
Java
68 lines
2.0 KiB
Java
// ============================================================================
|
|
//
|
|
// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
|
|
//
|
|
// This source code is available under agreement available at
|
|
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
|
|
//
|
|
// You should have received a copy of the agreement
|
|
// along with this program; if not, write to Talend SA
|
|
// 9 rue Pages 92150 Suresnes, France
|
|
//
|
|
// ============================================================================
|
|
package routines.system;
|
|
|
|
/**
|
|
* created by talend2 on 2014-4-11 Detailled comment
|
|
*
|
|
*/
|
|
public class Hex {
|
|
|
|
private static final char[] DIGITS_LOWER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
|
|
|
|
public static String encodeHexString(byte[] data) {
|
|
return new String(encodeHex(data));
|
|
}
|
|
|
|
private static char[] encodeHex(byte[] data) {
|
|
int l = data.length;
|
|
char[] out = new char[l << 1];
|
|
// two characters form the hex value.
|
|
for (int i = 0, j = 0; i < l; i++) {
|
|
out[j++] = DIGITS_LOWER[(0xF0 & data[i]) >>> 4];
|
|
out[j++] = DIGITS_LOWER[0x0F & data[i]];
|
|
}
|
|
return out;
|
|
}
|
|
|
|
public static byte[] decodeHex(char[] data) {
|
|
|
|
int len = data.length;
|
|
|
|
if ((len & 0x01) != 0) {
|
|
throw new RuntimeException("Odd number of characters.");
|
|
}
|
|
|
|
byte[] out = new byte[len >> 1];
|
|
|
|
// two characters form the hex value.
|
|
for (int i = 0, j = 0; j < len; i++) {
|
|
int f = toDigit(data[j], j) << 4;
|
|
j++;
|
|
f = f | toDigit(data[j], j);
|
|
j++;
|
|
out[i] = (byte) (f & 0xFF);
|
|
}
|
|
|
|
return out;
|
|
}
|
|
|
|
private static int toDigit(char ch, int index) {
|
|
int digit = Character.digit(ch, 16);
|
|
if (digit == -1) {
|
|
throw new RuntimeException("Illegal hexadecimal character " + ch + " at index " + index);
|
|
}
|
|
return digit;
|
|
}
|
|
}
|