我試圖將HEX序列轉換爲以ISO-8859-1,UTF-8或UTF-16BE編碼的字符串。也就是說,我有一個字符串,如下所示:"0422043504410442"
這表示UTF-16BE中的字符:。從Java中的HEX字符串創建ISO-8859-1字符串,移位
我用兩種格式之間進行轉換的代碼是:
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