char[]与byte[]互转负数有关问题
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) {
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;
}
}