package hextostring.utils;
import java.nio.charset.Charset;
import java.util.LinkedList;
import java.util.List;
/**
* Provides methods to convert hexadecimal data into readable strings.
*
* @author Maxime PIA
*/
public class Hex {
/**
* Converts a hexadecimal string into a readable string.
*
* @param hex
* The hexadecimal string.
* @param charset
* The charset used for the convertion.
* @return The readable string.
*/
public static String convertToString(String hex, Charset charset) {
return byteListToString(HexStringToByteList(hex), charset);
}
private static String byteArrayToString(byte[] data, Charset charset) {
return new String(data, charset);
}
private static String byteListToString(List<Byte> data, Charset charset) {
byte[] arrayData = new byte[data.size()];
int cmpt = 0;
for (Byte b : data) {
arrayData[cmpt++] = b;
}
return byteArrayToString(arrayData, charset);
}
private static List<Byte> HexStringToByteList(String hex) {
List<Byte> byteList = new LinkedList<>();
boolean littleEnd = false;
int currVal = 0;
for (int i = 0; i < hex.length(); ++i) {
if (littleEnd) {
currVal = currVal | (Character.digit(hex.charAt(i), 16));
} else {
currVal = (Character.digit(hex.charAt(i), 16)) << 4;
}
if (littleEnd) {
byteList.add((byte) (currVal & 0xFF));
}
littleEnd = !littleEnd;
}
return byteList;
}
}