当前位置: 代码迷 >> J2EE >> char[]与byte[]互转负数有关问题
  详细解决方案

char[]与byte[]互转负数有关问题

热度:353   发布时间:2016-04-17 23:41:16.0
char[]与byte[]互转负数问题
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;



public class mytest {

public static void main(String[] args) {
// TODO Auto-generated method stub

byte[] bytes = new byte[]{-76, -1, 32, 30, 36};

char[] chars = getChars(bytes);

byte[] bytes2= getBytes(chars);

char[] chars2 = getChars(bytes2);

}
/**char转byte*/
public static byte[] getBytes (char[] chars) {
   Charset cs = Charset.forName ("UTF-8");
  // Charset cs = Charset.forName ("US-ASCII");
   CharBuffer cb = CharBuffer.allocate (chars.length);
   cb.put (chars);
   cb.flip ();
   ByteBuffer bb = cs.encode (cb);
  
   return bb.array();

 }


/**byte转char*/
public static char[] getChars (byte[] bytes) {

  
//   int len = bytes.length;
//   char[] chars = new char[len];
//   
//   for(int i=0;i<len;i++){
//   chars[i]= (char)(bytes[i] & 0xff);
//// if(bytes[i]<0){
////   chars[i] = (char) (bytes[i]+256);
////   //chars[i]= (char)(bytes[i] & 0xff);
//// }else{
////   chars[i] = (char)bytes[i];
//// }
//   }
//   return chars;

      Charset cs = Charset.forName ("UTF-8");
//Charset cs = Charset.forName ("US-ASCII");
      ByteBuffer bb = ByteBuffer.allocate (bytes.length);
      bb.put (bytes);
       bb.flip ();
       CharBuffer cb = cs.decode (bb);
  
   return cb.array();
}
}


如上代码,负数怎么还能转回来,现在来回转几次后,不对了。
byte[]{-76, -1, 32, 30, 36}转为char[]后,再由char[]转回来,能怎么样才能保持不变。
------解决思路----------------------
在Java中char和byte锁占用的字节数是不一样的,就比如byte的-1,和int的-1就差别很大,所以在转化的时候要进行&运算,比如转化-76的时候应该是-76&0xFF,
------解决思路----------------------
大哥,您把正确的代码给注释掉了,  

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;

public class mytest {

public static void main(String[] args) {
// TODO Auto-generated method stub

byte[] bytes = new byte[]{-76, -1, 32, 30, 36};

char[] chars = getChars(bytes);

byte[] bytes2= getBytes(chars);

char[] chars2 = getChars(bytes2);

}

/** char转byte */
public static byte[] getBytes(char[] chars) {



 int len = chars.length;
 byte[] bytes = new byte[len];

 for(int i=0;i<len;i++){
 bytes[i]= (byte)(chars[i]);
 }
 return bytes;
}

/** byte转char */
public static char[] getChars(byte[] bytes) {

 int len = bytes.length;
 char[] chars = new char[len];

 for(int i=0;i<len;i++){
 chars[i]= (char)(bytes[i] & 0xff);
 }
 return chars;

}
}
  相关解决方案