字符一个一个的处理,转换负数可以用下面这个语句: int i = b>= 0 ? b : 256+b 从<Java网络编程》里看的
kinzey34(无声之舞): 没看清,这个帖子回了两次,厚厚,不好意思~java没有无符号类型,只能用相同位数的int代替了,只要你清楚使用的是有符号还是无符号的,一般没有多大问题,反过来就不好说了,不过没有那样用的吧。例如: byte[] input = new byte[10]; for (int i = 0;i < input.length;i++) { int b = in.read(); if (b == -1) break; input[i] = (byte)b; }
String str = null;
mydata = ……;//
for(int i=0;i < mydata.length; i++){
str = str + (char)mydata[i];
}
比较傻,但有效
“-128”肯定是“?”啦!
你到底要干什么?
你是不是想要这样啊: byte mydata[];
String str = null;
String allStr=null;
mydata = ……;//
for(int i=0;i < mydata.length; i++){
str =(new Integer(mydata[i])).toString;
allStr=new String(allStr+str);
}
最后,如果你的字节数组存的都是-128,那么allStr将是:
-128-128-128.........
byte tt[]=new byte[2];
tt[0]=-128;
tt[1]=-128;
String s=new String(tt);//这里试过很多编码类型都没用。
byte aa[]=s.getBytes();
System.out.println(new String(aa));输出是??。请问这种失真现象是否能解决?
String str = new String(b);
str = new String(str.getBytes("iso-8859-1"),"GB2312");
写了一个笨办法,呵呵,肯定有比这简单的方法吧
我还是没搞明白你想干什么。
byte tt[]=new byte[4];
tt[0]=-127;
tt[1]=-127;
tt[2]=-127;
tt[3]=-127;
String s=new String(tt);
System.out.println(s);
byte aa[]=s.getBytes();
System.out.println(aa[0]);
System.out.println(aa[1]);
System.out.println(aa[2]);
System.out.println(aa[3]);
System.out.println(new String(aa));将输出:
亖亖
-127
-127
-127
-127
亖亖同样,你在byte tt[]里赋值从-1到-127都可以得到类似结果
但是-128不同:
byte tt[]=new byte[4];
tt[0]=-128;
tt[1]=-128;
tt[2]=-128;
tt[3]=-128;
String s=new String(tt);
System.out.println(s);
byte aa[]=s.getBytes();
System.out.println(aa[0]);
System.out.println(aa[1]);
System.out.println(aa[2]);
System.out.println(aa[3]);
System.out.println(new String(aa));结果是:
??
63
63
并且JAVA提示异常:
Exception ... java.lang.ArrayIndexOutOfBoundsException:2
异常原因是没有aa[2]可以显示,数组已越界。这就是-128的特殊性:-1到-127的byte转换为
String是每双字节转换为一个我们所不认识的汉字,但两个-128转换成了1个?号,最终再转换
回byte时造成数组越界
以上各位所举的例子还是没有解决这个问题.
int unsignedByte = signedByte < 0 ? signedByte + 256 : signedByte;
这样大概就能识别字符了,在做转化的处理就方便了,你先试试。
byte[]=125呢还是byte[]=-131?
当然你的思路值得借鉴
哎,没救了
int i = b>= 0 ? b : 256+b
从<Java网络编程》里看的
没看清,这个帖子回了两次,厚厚,不好意思~java没有无符号类型,只能用相同位数的int代替了,只要你清楚使用的是有符号还是无符号的,一般没有多大问题,反过来就不好说了,不过没有那样用的吧。例如:
byte[] input = new byte[10];
for (int i = 0;i < input.length;i++) {
int b = in.read();
if (b == -1) break;
input[i] = (byte)b;
}