byte []到String {100,25,28,-122,-26,94,-3,-26}

时间:2013-02-13 11:01:47

标签: java byte

如何将此byte []转换为String:

byte[] mytest = new byte[] {100,25,28,-122,-26,94,-3,-26};

我得到这个:"d��^�"当我使用时:

new String( mytest , "UTF-8" )

以下是用于创建密钥的代码java:

m_key = new javax.crypto.spec.SecretKeySpec(new byte[] {100,25,28,-122,-26,94,-3,-26}, "DES");

感谢。

3 个答案:

答案 0 :(得分:1)

为了将字节数组解码为ASCII格式,您需要知道其原始编码。否则你需要将其视为二进制。

注意:Base64用于跨网络传输二进制数据。

我建议您对字节数组进行Base64编码。然后在您的PHP代码中将Base64字符串解码回UTF-8字符串。

在Java中,这里是如何对字节数组进行Base64编码,然后将其解码回UTF-8:

import org.apache.commons.codec.binary.Base64;

public class MyTest {
    public static void main(String[] args) throws Exception {
        byte[] byteArray = new byte[] {100,25,28,-122,-26,94,-3,-26};
        System.out.println("To UTF-8 string: " + new String(byteArray, "UTF-8"));

        byte[] base64 = Base64.encodeBase64(byteArray);
        System.out.println("To Base64 string: " + new String(base64, "UTF-8"));

        byte[] decoded = Base64.decodeBase64(base64);
        System.out.println("Back to UTF-8 string: " + new String(decoded, "UTF-8"));

        /* the decoded byte array is the same as the original byte array */
        for (int i = 0; i < decoded.length; i++) {
            assert byteArray[i] == decoded[i];
        }
    }
}

以上代码的输出是:

To UTF-8 string: d��^�
To Base64 string: ZBkchuZe/eY=
Back to UTF-8 string: d��^�

因此,如果您想在PHP代码中使用相同的二进制数据,请将Base64字符串剪切并粘贴到PHP代码中,然后将其解码回UTF-8。像这样:

<?php
$str = 'ZBkchuZe/eY=';
$key = base64_decode($str);
echo $key;
?>

我不用PHP编写代码,但您应该能够使用此方法解码Base64: http://php.net/manual/en/function.base64-decode.php

上面的代码应该将原始二进制数据回显为UTF-8(尽管有趣的字符)。关键是$key变量中看起来很滑稽的字符串表示与Java字节数组中相同的二进制数据:

d��^�

您应该能够将$key变量传递给PHP加密方法。

答案 1 :(得分:0)

你正在做的事情毫无意义imo。您正在创建一个以byte []作为参数的新字符串。我不认为该函数被假设解析。所以你最终得到的是很多垃圾。但一点点的谷歌搜索让我这样:http://www.mkyong.com/java/how-do-convert-byte-array-to-string-in-java/

答案 2 :(得分:0)

m_key.getEncoded()会给你想要的结果。

Javadocs - SecretKeySpec

如果没有,您必须确定用于编码的密钥提供程序(导致您现在拥有的字节数组)并解码。