[英]How to convert next character pair to a hex integer
在这里,我必须先反转两个字节,然后将该对转换为十六进制整数。 我正在尝试将其转换如下,但它给出了错误。 有什么想法吗? 提前致谢
此处完整的字符串: 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());
}
}
是的,我尝试在字符串前不加“ 0x”,现在看到的输出看起来很奇怪。
尝试在字符串前不加“ 0x”。 此前缀仅适用于编译器。 这实际上是说使用16作为基数的捷径。
您的字符串看起来像每个字符需要4位数字,而不是2位。
尽管您将2位数字解释为一个字符,但是乍看之下,您在图片中显示的输出似乎与您粘贴在pastebin上的字符串匹配。 您确实在输出中得到了看起来像单词的东西,所以它并不是完全不正确,并且字母之间的间隔来自第二对第二位数字“ 00”。
不确定此字符串来自何处,但是如果它也是通过将某些String中的字符转换为Bytes生成的,则每个字符为4位数字可能很有意义,例如,因为Java的char
是16位(即2个字节,也就是说,您的字符串中的4位数字)编码了它们在UTF-16中表示的实际Unicode符号。
如果您正在研究其他人提供给您的规范,也许当他们说“ 2 BYTES”时,它们实际上是“两个8位数字”,它们对应于您的十六进制字符串中的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());
}
}
我所做的只是将“ 2”替换为“ 4”。 :)
更新(根据聊天) :
此处发布的将十六进制字符串转换为字符的代码(每个字符使用4位数字)似乎可以正常工作,但是十六进制字符串似乎未遵循OP根据数据规范所期望的约定,这导致了部分混乱。
旁注 :
如果这是公共应用程序,则在网络流量中包含未加密的SQL语句的风险很高。 如果这些语句是请求的一部分并在服务器上执行,则黑客可以使用此语句对基础数据执行不需要的操作(例如,窃取数据库中的所有电话号码)。 如果仅仅是发送给客户端的一些调试/日志信息,那么它仍然不是一个好主意,因为它可能会向黑客提示有关数据库结构和访问方式的信息,从而大大简化了潜在的SQL注入攻击 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.