我必须首先反转两个字节,然后将该对转换为十六进制整数。我试图像下面那样转换它,但它给出了错误。有没有想过这样做?提前致谢
这里有完整的字符串:http://pastebin.com/1cSCyD78
示例字符串
String str = "031890";
错误讯息:
java.lang.NumberFormatException: Invalid int: "0x30"
Java代码
for ( int start = 0; start < str.length(); start += 2 ) {
try {
String thisByte = new StringBuilder(str.substring(start, start+2)).reverse().toString();
thisByte = "0x" + thisByte;
int value = Integer.parseInt(thisByte, 16);
char c = (char) value;
System.out.println(c);
} catch(Exception e) {
Log.e("MainActivity", e.getMessage());
}
}
StringBuilder output = new StringBuilder();
for ( int start = 0; start < str.length(); start += 2 ) {
try {
String thisByte = new StringBuilder(str.substring(start, start+2)).reverse().toString();
output.append((char)Integer.parseInt(thisByte, 16));
} catch(Exception e) {
Log.e("MainActivity", e.getMessage());
}
}
是的我尝试没有预先添加&#34; 0x&#34;到字符串,现在看到我的输出看起来很奇怪。
答案 0 :(得分:2)
尝试不预先添加&#34; 0x&#34;到字符串。此前缀仅适用于编译器。它实际上是说使用16作为基数的捷径。
答案 1 :(得分:2)
您的字符串看起来每个字符的字符串需要4个数字,而不是2个。
鉴于您将2位数字解释为一个字符,乍一看,您在图片中显示的输出似乎与您在pastebin上发布的字符串相匹配。你确实得到了输出中看起来像单词的东西,所以它并没有完全关闭,而且字母之间的间隙来自每两对2位数字,即“00&#39;”
不确定此字符串的来源,但如果它也是通过将某些字符串中的字符转换为字节而生成的,那么每个字符的4位数字可能是有意义的,因为例如Java&#39; s char
是16位(即2个字节,即字符串中的4个数字),用于编码它们在UTF-16中表示的实际unicode符号。
如果您正在处理其他人为您提供的规格,也许当他们说&#34; 2 BYTES&#34;时,他们实际上意味着&#34;两个8位数字&#34;,它们对应于4十六进制字符串中的数字(四个4位半字节)。
但是你的字符串看起来也包含二进制数据,而不仅仅是字符。你知道你真正希望看到什么作为答案吗?
更新(根据评论请求) :
这对您的代码进行了微不足道的更改,但现在是:
StringBuilder output = new StringBuilder();
for ( int start = 0; start < str.length(); start += 4 ) {
try {
String thisByte = new StringBuilder(str.substring(start, start+4)).reverse().toString();
output.append((char)Integer.parseInt(thisByte, 16));
} catch(Exception e) {
Log.e("MainActivity", e.getMessage());
}
}
我所做的就是替换&#34; 2&#34;用&#34; 4&#34;。 :)
更新(根据聊天情况) :
此处发布的将十六进制字符串转换为字符(每个字符使用4位数字)的代码似乎工作正常,但十六进制字符串似乎不符合OP期望的基于数据规范的约定,这引起了一些混乱。
附注 :
如果这是一个公共应用程序,则在网络流量中包含未加密的SQL语句是非常危险的。如果这些语句是请求的一部分并在服务器上执行,则黑客可以使用它来对基础数据执行不必要的操作(例如,窃取数据库中的所有电话号码)。如果只是发送给客户端的一些调试/日志信息,它仍然不是一个好主意,因为它可能会给黑客提供有关数据库结构和访问方式的提示,从而大大简化了潜在的SQL injection attack。