在java中解码十六进制字符串

时间:2015-01-22 13:59:26

标签: java hex decode

因为我试图将以下十六进制转换为java字符串。 因为这是UTF8字符。

ЫЙБПАРО此字符串转换为十六进制42b41941141f41042041e值。

我尝试使用以下javascript代码将字符串转换为十六进制

function encode(string) {
     var str= "";
        var length = string.length;        
        for (var i = 0; i < length; i++){
            str+= string.charCodeAt(i).toString(16);
            }
        return str;
}

我需要在java代码中解码会是什么样的方式。

尝试以下答案

mkyong.com/java/how-to-convert-hex-to-ascii-in-java

stackoverflow.com/questions/140131

Convert a string representation of a hex dump to a byte array using Java?

2 个答案:

答案 0 :(得分:1)

您可以尝试Apache Codec

byte[] b= Hex.decodeHex(yourhexdecimalstring.toCharArray());
System.out.println(new String(b, "UTF8"));

答案 1 :(得分:1)

让我们从第一个字符开始:这是Unicode表中的#1067。 这意味着4 x 256 + 43.因此,十六进制表示为04和2B(反之亦然,具体取决于字节顺序)。你的似乎是42 b4。所以我假设编码不正确。
我不熟悉jscript,但这段代码......

private void jscript() throws ScriptException {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    engine.eval("function encode(string) {\n"
            + "     var str= \"\";\n"
            + "        var length = string.length;        \n"
            + "        for (var i = 0; i < length; i++){\n"
            + "            str+= string.charCodeAt(i).toString(16);\n"
            + "            }\n"
            + "        return str;\n"
            + "}"
            + ""
            + "print(encode(\"ЫЙБПАРО\"));");
}

...返回此

  

42b41941141f41042041e

正如你写的那样。但在我看来,这是不正确的