黑马程序员技术交流社区

标题: 怎样将字节数组转成字符串 [打印本页]

作者: 叶征东    时间: 2012-8-5 15:51
标题: 怎样将字节数组转成字符串
讲到将字节数组转成字符串时,毕老师讲了两个方法:String(byte[])和String(byte[],offset,count),但是没有讲实例。
下面是我写的代码:
class Demo
{
      public static void main(String[] args)
      {
             byte[] b={23,45,56,24,43,87,12,64};
             String s1=new String(b);
             String s2=new String(b,2,4);
             System.out.println(s1);
             System.out.println(s2);
             System.out.println("Holle world");
     }
}
编译能通过,但输出的结果是 请问这是怎么回事,能给我写个实例么,谢谢。

作者: 黑马振鹏    时间: 2012-8-5 16:05
byte[] b={23,45,56,24,43,87,12,64};
定义的是一个byte数组,转换的时候是查的ASC码表,找到值对应的字符,然后打印值,就是那些乱码。
作者: 侯宪博    时间: 2012-8-5 16:16
一楼正解
其实这个转换方法有他的局限性
因为字符类型占两个字节
而byte却是一个字节
也就是说不是所有的字符都能用byte来表示
所有的byte类型的数据却都可以转成相应的字符串。。。
作者: 叶征东    时间: 2012-8-5 17:37
侯宪博 发表于 2012-8-5 16:16
一楼正解
其实这个转换方法有他的局限性
因为字符类型占两个字节

谢谢,能写个实例么。
作者: 侯宪博    时间: 2012-8-5 19:01
叶征东 发表于 2012-8-5 17:37
谢谢,能写个实例么。

其实你自己写的就是个实例啊。。。
其实你打印出来的不是乱码,是按照ascII码表打印出来的
你的数组中出现了W,其实W对应的十进制ascII码值就是87
你看你数组中是不是有87
你要是想打印出字母字符串简单
那你就用着几个数
A-Z(ascII码对应十进制65--90)
a-z(ascII码对应十进制97--122)
你在我给你说的数中间随便挑
打印出来全是英文字母字符
希望对你能有所帮助。。。
作者: 官文昌    时间: 2012-8-5 19:32
我给你举个列子吧~~

public class Test
{
      public static void main(String[] args)
      {
             byte[] b={'a','b','c','d','e'};
             String s=new String(b);
             String s1=new String(b,1,3);
            
             System.out.println(s);
             System.out.println(s1);
             System.out.println("Holle world");
     }
}




abcde
bcd
Holle world

作者: 叶征东    时间: 2012-8-5 22:57
侯宪博 发表于 2012-8-5 19:01
其实你自己写的就是个实例啊。。。
其实你打印出来的不是乱码,是按照ascII码表打印出来的
你的数组中出 ...

谢谢了。
作者: 叶征东    时间: 2012-8-5 23:20
问题已解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2