我正在尝试将 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