我需要一种将hex转换为ascii的方法,而且大多数似乎是以下内容的变体:
public String hexToAscii(String hex) {
StringBuilder sb = new StringBuilder();
StringBuilder temp = new StringBuilder();
for(int i = 0; i < hex.length() - 1; i += 2){
String output = hex.substring(i, (i + 2));
int decimal = Integer.parseInt(output, 16);
sb.append((char)decimal);
temp.append(decimal);
}
return sb.toString();
}
想法是看
hexToAscii("51d37bdd871c9e1f4d5541be67a6ab625e32028744d7d4609d0c37747b40cd2d");
如果我打印出结果,我会
-Í@{t7?`Ô×D?2^b«¦g¾AUM??Ý{ÓQ.
这不是我需要的结果。一位朋友在PHP中得到了正确的结果,这是以下字符串的反转:
QÓ{݇žMUA¾g¦«b^2‡D×Ô`7t{@Í-
有明显的字符表明他的hexToAscii函数是编码而我的不是。 不确定为什么会这样,但我怎样才能在Java中实现这个版本?
答案 0 :(得分:0)
怎么样这样:
public static void main(String[] args) {
String hex = "51d37bdd871c9e1f4d5541be67a6ab625e32028744d7d4609d0c37747b40cd2d";
StringBuilder output = new StringBuilder();
for (int i = 0; i < hex.length(); i+=2) {
String str = hex.substring(i, i+2);
output.append((char)Integer.parseInt(str, 16));
}
System.out.println(output);
}
答案 1 :(得分:0)
假设您的输入字符串为in
,我会使用这样的方法
public static byte[] decode(String in) {
if (in != null) {
in = in.trim();
List<Byte> bytes = new ArrayList<Byte>();
char[] chArr = in.toCharArray();
int t = 0;
while (t + 1 < chArr.length) {
String token = "" + chArr[t] + chArr[t + 1];
// This subtracts 128 from the byte value.
int b = Byte.MIN_VALUE
+ Integer.valueOf(token, 16);
bytes.add((byte) b);
t += 2;
}
byte[] out = new byte[bytes.size()];
for (int i = 0; i < bytes.size(); ++i) {
out[i] = bytes.get(i);
}
return out;
}
return new byte[] {};
}
然后你可以像这样使用它
new String(decode("51d37bdd871c9e1f4d5541be67a6ab625e"
+"32028744d7d4609d0c37747b40cd2d"))