把一个byte[] 转化为String的问题

terryep 2003-10-15 12:13:32
我现在有一个byte[]数组,里面有一些字节的ASCII码是负数,比如-128,在用new String(byte[])转换后,可能JAVA认不出这个-128,就把它变成"?",一个问号了。
但这不是我要的,请问怎么解决这个问题???谢谢
...全文
169 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuchuan 2003-11-02
  • 打赏
  • 举报
回复
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;
}


zhanghuazhanghome 2003-11-02
  • 打赏
  • 举报
回复
关注
collision 2003-11-01
  • 打赏
  • 举报
回复
new String (byte[]);
liuchuan 2003-11-01
  • 打赏
  • 举报
回复
字符一个一个的处理,转换负数可以用下面这个语句:
int i = b>= 0 ? b : 256+b
从<Java网络编程》里看的
littlecpu 2003-11-01
  • 打赏
  • 举报
回复
Java没有无符号数,只要Byte[]来得正确,不需作任何转换,用相同字符集一定可以还原成String的
哎,没救了
liuchuan 2003-10-16
  • 打赏
  • 举报
回复
没看懂你的意思,不过我知道Java的byte类型有可能是负的,可以这样转换成正值:
int unsignedByte = signedByte < 0 ? signedByte + 256 : signedByte;
这样大概就能识别字符了,在做转化的处理就方便了,你先试试。
kinzey34 2003-10-16
  • 打赏
  • 举报
回复
请问liuchuan(不得安息):照你那样去做的话,一个 unsignedByte==125,你说它是原来的
byte[]=125呢还是byte[]=-131?
当然你的思路值得借鉴
chifengwatch 2003-10-16
  • 打赏
  • 举报
回复
up
reason2008 2003-10-15
  • 打赏
  • 举报
回复
byte mydata[];
String str = null;
mydata = ……;//
for(int i=0;i < mydata.length; i++){
str = str + (char)mydata[i];
}
比较傻,但有效
terryep 2003-10-15
  • 打赏
  • 举报
回复
不行啊
jscsqb 2003-10-15
  • 打赏
  • 举报
回复
如果放在数组a中

new String(a,"ISO8859_1");
试试看
terryep 2003-10-15
  • 打赏
  • 举报
回复
其实我是在一个压缩算法后得到一个byte[],其中就有-128,接下来我调用easycics中的SetValue(String,String)函数,byte[]对应第二个参数。这样我就要把byte[]转成String才能传过去,可是在用new String(byte[])时,JAVA把一些不可见的字符转成了"?",就是63
以上各位所举的例子还是没有解决这个问题.
kinzey34 2003-10-15
  • 打赏
  • 举报
回复
除了-128以外,-1到-127你用byte[]存入String再取回都是成功的,代码:
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时造成数组越界

Jawan_lee 2003-10-15
  • 打赏
  • 举报
回复
toString()
xxlcg 2003-10-15
  • 打赏
  • 举报
回复
个人认为 String s=new String(tt);是把tt[0]和tt[1]都当成ASCII码来进行转换,而像“-128”这样的ASCII码到底有没有你有没有查ASCII码表?即使能转换,也应该是中文字符吧。
我还是没搞明白你想干什么。
terryep 2003-10-15
  • 打赏
  • 举报
回复
你举的是a,b,c是可见的字符,我是指不可见的
pleonheart 2003-10-15
  • 打赏
  • 举报
回复
晕,我没看清题目,不好意思,呵呵
pleonheart 2003-10-15
  • 打赏
  • 举报
回复
byte[] b = {'a','b','c'};
String str = new String(b);
str = new String(str.getBytes("iso-8859-1"),"GB2312");
写了一个笨办法,呵呵,肯定有比这简单的方法吧
terryep 2003-10-15
  • 打赏
  • 举报
回复
急啊,请各位大侠指教!!!
terryep 2003-10-15
  • 打赏
  • 举报
回复
代码如下:
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));

输出是??。请问这种失真现象是否能解决?
加载更多回复(3)

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧