2

我正在努力尝试将十六进制数字字符串转换回原始字符串。我使用以下方法转换字符串:

 private static String hex(String  binStr) {

        String newStr = new String();

        try {
            String hexStr = "0123456789ABCDEF";
            byte [] p = binStr.getBytes();
            for(int k=0; k < p.length; k++ ){
                int j = ( p[k] >> 4 )&0xF;
                newStr = newStr + hexStr.charAt( j );
                j = p[k]&0xF;
                newStr = newStr + hexStr.charAt( j ) + " ";
            }   
        } catch (Exception e) {
            System.out.println("Failed to convert into hex values: " + e);
        } 

        return newStr;
    }

我真的被困住了,任何建议都将不胜感激。

先感谢您

4

2 回答 2

1

考虑一下:

     String hexStr = "0123456789ABCDEF";
     long i = Long.valueOf(hexStr, 16);
     System.out.println(Long.toHexString(i));
于 2012-11-18T17:55:22.660 回答
1

问题中的代码会破坏信息。只有每个输入字节的最高有效两位和最低有效四位对结果有影响。这意味着它通常不能被逆转。

如果右移了 4 位,而不是 6:

int j = ( p[k] >> 4 )&0xF;

所有输入都将被保留,并且可以从十六进制字符串中恢复原始字符串。也许您真的是指四位移位?

于 2012-11-18T17:55:47.570 回答