今天在做DES加密程序的时候遇到这个问题!
我先把byte[]转换为String之后再转换为byte[]
变换前cipherByte[]: 22 -72 -16 -74 -5 53 20 -47 30 65 -55 2 26 9 -118 -1
变换后cipherByte[]: 22 -72 -16 -74 -5 53 20 63 30 65 63 2 26 9 63 63请问下有哪位高人知道如何把byte[]变回原来的byte[]!

解决方案 »

  1.   

    string 不是有方法和构造函数吗?应该不会有问题吧~~
      

  2.   

    用valueOf()或者parseXXX()转换可以吧.
      

  3.   


    是有问题的...
    我曾经也遇过
    我当时是把图片的字节流转换成字符流遇到的经过比较,基本是负数在转换的过程中出问题最终成为63(为什么是这个尚为深究)
    我当时粗略的计算了下,(在转换比较多的时候)某些负数在转换成string又回到byte[]的时候会出现两种可能值
    这时候就会出问题,其中有个原因就是java的byte是-128~127(并且string转byte之间没有分隔),如果采用0~255的方案就不会产生问题(.net是采取的这个,并且字节转字符后每个字符前加"0").可能能从把0~65535的String拆分成255x255入手,当时只是这么想了一下也没再管..后来看到个兄弟的把byte[]变成特别的string的启发(他当时也是得不到正确的byte)而给你个方案:
    public String byte2hex(byte[] b) 
       {  /**byte[]变成了特殊的string,且是16进制
           *就是我上面提到的每个byte成为了string后之间以0分割
            *即以"0f"这样构成一个字符
           *.net是这样的格式
           */
            String hs = "";  
            String stmp = "";  
            for (int n = 0; n   < b.length; n++)  
            {  
                stmp = (Integer.toHexString(b[n] & 0XFF));  
                if (stmp.length() == 1)  
                {  
                    hs = hs + "0" + stmp;  
                } else  
                {  
                    hs = hs + stmp;  
                }  
            }  
            return hs;  
        }
        
    public byte[] Tobyte(String st)
    {/**
              *string取得每个字符的低8位,在转成10进制
              */
      int len=st.length();
      byte[] b=new byte[len/2];
      
      if(len>0)
      {
       for(int i=0;i<len;i=i+2)
       {
       b[i/2]=(byte)Integer.parseInt(st.substring(i,i+2),16);
       }
      
      }
     return b;

    看这个对你有没有帮助
      

  4.   


    public byte[] Tobyte(String st)
        {/**
              *string取得每个字符的低8位,在转成10进制
              */
          int len=st.length();
          byte[] b=new byte[len/2];
          
          if(len>0)
          {
              for(int i=0;i<len;i=i+2)  //i<len在有的情况下有字符串越界的的可能,我就碰到了。还是改成i<len-1最保险
              {
                  b[i/2]=(byte)Integer.parseInt(st.substring(i,i+2),16);
              }
              
          }
         return b;
        } 现在终于搞定了偶的DES!
    谢谢 runshine 
      

  5.   

    答:楼主,哪有那么复杂啊.两句话就行啦(不信,楼主试试)
    设:
    byte[] b1={22,-72, -16, -74 ,-5, 53 ,20 ,-47, 30, 65, -55, 2 ,26 ,9 ,-118 ,-1};第一句:byte[]==>String
    String s=new String(b1,"iso-8859-1");//转成String
    第二句:再从String转加回来==>byte[]byte[] b2=s.getBytes("iso-8859-1");楼主可以测试:b1与b2是完全相同的(指:值)