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

J2EE 码拜 10年前 (2015-04-11) 1765次浏览 0个评论
 

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[]转回来,能怎么样才能保持不变。

char[]与byte[]互转负数问题
10分
在Java中char和byte锁占用的字节数是不一样的,就比如byte的-1,和int的-1就差别很大,所以在转化的时候要进行&运算,比如转化-76的时候应该是-76&0xFF,
char[]与byte[]互转负数问题
30分
大哥,您把正确的代码给注释掉了,  

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;

	}
}
char[]与byte[]互转负数问题
貌似可以了啊,还有其他办法嘛
char[]与byte[]互转负数问题
用没有注释的为什么不行

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明char[]与byte[]互转负数问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!