Я пытаюсь преобразовать HEX-последовательность в строку, закодированную в ISO-8859-1, UTF-8 или UTF-16BE. То есть у меня есть строка, похожая на: "0422043504410442"
, которая представляет символы: "Test"
в UTF-16BE.
Код, который я использовал для преобразования между двумя форматами, был:
private static String hex2String(String hex, String encoding) throws UnsupportedEncodingException {
char[] hexArray = hex.toCharArray();
int length = hex.length() / 2;
byte[] rawData = new byte[length];
for(int i=0; i<length; i++){
int high = Character.digit(hexArray[i*2], 16);
int low = Character.digit(hexArray[i*2+1], 16);
int value = (high << 4) | low;
if( value > 127)
value -= 256;
rawData[i] = (byte) value;
}
return new String(rawData, encoding);
}
Мне кажется, это работает нормально, но у меня все еще есть два вопроса по этому поводу:
- Есть ли более простой способ (желательно без обработки битов) сделать это преобразование?
- Как мне интерпретировать строку:
int value = (high << 4) | low;
?
Я знаком с основами обработки битов, хотя совсем не знаком с синтаксисом Java. Я считаю, что первая часть сдвигает все биты влево на 4 шага. Хотя в остальном я не понимаю и почему это было бы полезно в этой конкретной ситуации.
Я прошу прощения за путаницу в моем вопросе, пожалуйста, дайте мне знать, если я должен что-то прояснить.
Спасибо.
// Abeansits