繁体   English   中英

如何将下一个字符对转换为十六进制整数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM