如何将十六进制字符串转换为Java字符串?
为了记录日志,我们将日志转换为字节数组,然后转换为十六进制字符串。我希望以Java字符串的形式将其返回,但我无法这样做 日志文件中的十六进制字符串类似于如何将十六进制字符串转换为Java字符串?,java,string,hex,Java,String,Hex,为了记录日志,我们将日志转换为字节数组,然后转换为十六进制字符串。我希望以Java字符串的形式将其返回,但我无法这样做 日志文件中的十六进制字符串类似于 fd00000aa8660b5b010006acdc0100000101000100010000 如何对其进行解码?首先读取数据,然后将其转换为字节数组: byte b = Byte.parseByte(str, 16); 然后使用String构造函数: new String(byte[] bytes) 或者,如果字符集不是系统默认
fd00000aa8660b5b010006acdc0100000101000100010000
如何对其进行解码?首先读取数据,然后将其转换为字节数组:
byte b = Byte.parseByte(str, 16);
然后使用String
构造函数:
new String(byte[] bytes)
或者,如果字符集不是系统默认值,则:
new String(byte[] bytes, String charsetName)
在Apache Commons中使用:
String hexString = "fd00000aa8660b5b010006acdc0100000101000100010000";
byte[] bytes = Hex.decodeHex(hexString.toCharArray());
System.out.println(new String(bytes, "UTF-8"));
请尝试以下代码:
public static byte[] decode(String hex){
String[] list=hex.split("(?<=\\G.{2})");
ByteBuffer buffer= ByteBuffer.allocate(list.length);
System.out.println(list.length);
for(String str: list)
buffer.put(Byte.parseByte(str,16));
return buffer.array();
}
公共静态字节[]解码(字符串十六进制){
String[]list=hex.split((?这是将十六进制字符串转换为java字符串的另一种方法:
public static String unHex(String arg) {
String str = "";
for(int i=0;i<arg.length();i+=2)
{
String s = arg.substring(i, (i + 2));
int decimal = Integer.parseInt(s, 16);
str = str + (char) decimal;
}
return str;
}
公共静态字符串unHex(字符串arg){
字符串str=“”;
对于(int i=0;i您可以从字符串(十六进制)
到字节数组
到字符串作为UTF-8(?)
。确保您的十六进制字符串没有前导空格和其他内容
你应该开始将你的一些问题标记为已回答,这将帮助你获得更多答案。我投了你一票,因为没有展示任何先前的研究/努力。当然,它可能有效,也可能无效,这取决于“其他人”使用的编码“。可能他们使用了拉丁语9.或UTF-8.或EUC-JP.或者可能是大端的。谁知道呢?这就是为什么在转换为十六进制字符串之前,应该指定日志字符串使用的编码。使用Byte.parseByte(str,16);
解析一个十六进制数。字符串构造函数需要一个字节数组,而不仅仅是字节,我尝试了,但失败了。@zundi在第一行中只解析一个字节。所以你需要使用一个循环来获取所有字节并将其放入数组。请看Munene iUwej Julius answer。他的方法就是这样做的。我将byte.parseByte改为(byte)Integer.parseInteger允许对大于128的数字进行分析。@domenukk它是Integer.parseInteger(..)不是Integer.parseInteger(..).Byte.parseByte实现如下{返回(字节)Integer.ParseIntent(Str,base);}@Munene thanx 4个正在创建的子字符串regexLots。不理想。用StringBuffer()替换“String Str”,并使用sb.append(char)如果性能是一个问题。如何对kitkat以下的版本执行ot?我可以问一下将其转换为UTF-8字符串的目的是什么吗?我在哪里找到DatatypeConverter
?在最近的Java版本中不再公开了javax.xml.bind.DatatypeConverter编码值是什么?Hex现在是Apache Commons编码的一部分这里是dependency:commons codec commons codec 1.12
不需要太多的识别,这些数据不是UTF-8编码的字符串,新字符串(字节,“UTF-8”)
只会产生垃圾。
public static String unHex(String arg) {
String str = "";
for(int i=0;i<arg.length();i+=2)
{
String s = arg.substring(i, (i + 2));
int decimal = Integer.parseInt(s, 16);
str = str + (char) decimal;
}
return str;
}
public static byte[] hexStringToByteArray(String hex) {
int l = hex.length();
byte[] data = new byte[l / 2];
for (int i = 0; i < l; i += 2) {
data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
+ Character.digit(hex.charAt(i + 1), 16));
}
return data;
}
String b = "0xfd00000aa8660b5b010006acdc0100000101000100010000";
byte[] bytes = hexStringToByteArray(b);
String st = new String(bytes, StandardCharsets.UTF_8);
System.out.println(st);