byte[] data = new byte[4];
data[0] = 26;
data[1] = -61;
data[2] = 0;
data[3] = 0;

String str = new String(data);
byte[] b = str.getBytes(); for (int i = 0; i < b.length; i ++)
{
    System.out.println("b[" + i + "]:" + b[i]);
}结果为:
b[0]:26
b[1]:63
b[2]:0
b[3]:0

解决方案 »

  1.   

    public class test{
    public static void main(String[] args){
    byte[] data = new byte[4];
    data[0] = 26;
    data[1] = -61;
    data[2] = 0;
    data[3] = 0;

    String str = new String(data);
    byte[] b = str.getBytes(); for(int i = 0; i < b.length; i++)
    {
         System.out.println("b[" + i + "]:" + b[i]);
    }
    }
    }
    结果为:
    b[0]:26
    b[1]:-61
    b[2]:0
    b[3]:0
      

  2.   

    老大,按照正常情况: 结果应该为:
    b[0]:26
    b[1]:-61
    b[2]:0
    b[3]:0但我这边做出的结果是:
    b[0]:26
    b[1]:63
    b[2]:0
    b[3]:0
      

  3.   

    具体原因我不知道说说我的想法仅供参考
    b[1]最后的结果是63,ascii码里63是?String str = new String(data)
    应该是将byte转为char存到字符串里-61转成char,没有标准的字符对应,实际str里相应的位置什么都没存!
    byte[] b = str.getBytes();
    这时候,再得到byte的时候,这个位置实际上转不回来了!
    jdk可能在这里默认得用?号来处理了,就得到了63实际上你用别的值,比如-60,-66等。得到的结果都是63
      

  4.   

    在将byte[]转换为String和将String转换成byte的过程中可以制定使用的字符集。修改成以下的样子后就可以了。
    byte[] data = new byte[4];
    data[0] = 26;
    data[1] = -61;
    data[2] = 0;
    data[3] = 0;

    String str;
    try
    {
    str = new String(data,0,4,"ISO-8859-1");
    byte[] b = str.getBytes("ISO-8859-1");
    for (int i = 0; i < b.length; i ++)
    {
        System.out.println("b[" + i + "]:" + b[i]);
    }
    } catch ( UnsupportedEncodingException e )
    {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }