java中的十六进制到ascii转换包含一些特殊字符
我有一个十六进制字符串,我正在将其转换为ascii,但结果显示了带有一些特殊字符的输出 实际字符串=adsfads 输出字符串=adsfads��� 字符串hex=“61647366616473000000”; StringBuilder输出=新的StringBuilder(); 对于(int i=0;ijava中的十六进制到ascii转换包含一些特殊字符,java,jsp,Java,Jsp,我有一个十六进制字符串,我正在将其转换为ascii,但结果显示了带有一些特殊字符的输出 实际字符串=adsfads 输出字符串=adsfads��� 字符串hex=“61647366616473000000”; StringBuilder输出=新的StringBuilder(); 对于(int i=0;i
顺便说一句,您的代码似乎很好。您的代码很好。没有特殊字符显示 只需再次检查您的代码 请关注此帖子
公共类Test8{
公共静态void main(字符串[]args)
{
字符串hex=“61647366616473000000”;
StringBuilder输出=新的StringBuilder();
对于(int i=0;i
您的ASCII包含一些不可打印的字符,这就是导致问题的原因。如果您查看字符串的十六进制值“adsfads”等于61647366616473,而您使用的是“61647366616473000000”,最后一个是“000000”不可打印字符。如果要从字符串中删除这些零,则可以通过代码获得所需的结果。或者,也可以从字符串中替换不可打印字符以获得适当的结果。或者,您可以编写代码以检查ascii字符是否不可打印,然后为其指定一些值,如下所示:
public static boolean isAsciiPrintable(char ch) {
if(ch >= 32 && ch < 127)
{
return true;
}
else
//return false and do the stuff in calling method.
}
public静态布尔值isAsciiPrintable(char-ch){
如果(ch>=32&&ch<127)
{
返回true;
}
其他的
//返回false并在调用方法中执行操作。
}
您还可以修改现有代码以获得所需的输出,如下所示
String hex = "61647366616473000000";
StringBuilder output = new StringBuilder();
for (int i = 0; i < hex.length(); i += 2) {
String str = hex.substring(i, i + 2);
int decimal = Integer.parseInt(str, 16);
output.append((char) decimal);
}
System.out.println("YourText" + output.toString().replaceAll("\\p{C}", ""));
字符串hex=“61647366616473000000”;
StringBuilder输出=新的StringBuilder();
对于(int i=0;i可能有一些不可见的空白字符(如0x0200B),它们是\p{Zs}组的一部分,该组也包含空白。如果您试图筛选不应包含任何空格的输入字符串,字符串replaceAll([\p{C}\p{Z}],“”)将起作用。十六进制字符串的000000部分给出了奇怪的字符。
public static boolean isAsciiPrintable(char ch) {
if(ch >= 32 && ch < 127)
{
return true;
}
else
//return false and do the stuff in calling method.
}
String hex = "61647366616473000000";
StringBuilder output = new StringBuilder();
for (int i = 0; i < hex.length(); i += 2) {
String str = hex.substring(i, i + 2);
int decimal = Integer.parseInt(str, 16);
output.append((char) decimal);
}
System.out.println("YourText" + output.toString().replaceAll("\\p{C}", ""));