黑马程序员技术交流社区

标题: getBytes()输出的是什么呢? [打印本页]

作者: Cola    时间: 2013-11-26 20:42
标题: getBytes()输出的是什么呢?
本帖最后由 Cola 于 2013-11-27 07:17 编辑

getBytes()输出的是什么呢?为什么输出的是49 50 51呢?
  1. String s2="123";
  2. byte[] by1=s2.getBytes();
  3. for(int x=0;x<by1.length;x++)
  4. {
  5.         sop(by1[x]);
  6. }
复制代码

作者: RuntimeError!    时间: 2013-11-26 20:54
因为String存储的是字符串,里面的123是字符的123,是按照ascii码存储的,getBytes得到的是字节码,是ascii  0~9在ascii里面是0x30到0x39  换算到10进制就是48~57.所以1,2,3对应的是49,50,51。
作者: HAnG    时间: 2013-11-26 20:57
遇到这种情况要查阅下API文档。
public byte[] getBytes() 的描述是:
使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

说明这个方法返回的是一个byte数组,数组每个元素就是每个字符对应ASCII编码表位置,1对应49,所以123输出49,50,51
作者: 还不到时候    时间: 2013-11-26 21:00
这里运用了编码的知识点


  1. <p> </p><p>String s2="123";
  2. byte[] by1=s2.getBytes();//这是编码的过程,数组by1中存放是1,2,3这三个字节的二进制数,输出的时候就转换成十进制了。</p><p>提醒:byte[]中存放的元素是byte字节,由8个bit位组成的二进制数</p><p>//char[] ch = s2.toCharArray();数组ch中存放的才是1,2,3这三个字符
  3. for(int x=0;x<by1.length;x++)
  4. {
  5. </p><p>        sop(by1[x]);
  6. </p><p>}</p><p>String s2="123";
  7. byte[] by1=s2.getBytes();//这是编码的过程,
  8. for(int x=0;x<by1.length;x++)
  9. {
  10. </p><p>        sop((char)by1[x]);//这是解码的过程,将byte数组每个元素按照ANSI码表进行解码
  11. </p><p>}</p>
复制代码


作者: freehiker    时间: 2013-11-26 21:05
本帖最后由 freehiker 于 2013-11-26 21:15 编辑

getBytes()返回的是byte[],若吧byte[]遍历出来,
byte[] bytes  = "abc".getBytes();
             for(byte b : bytes){
                     System.out.println(b);
             }
             //结果97 98 99
结果是ascii编码对应的值
作者: 张天昊76    时间: 2013-11-26 22:34
首先要说一下getBytes();方法的作用,它使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。也就是你的前两行代码。
  1. String s2="123";
  2. byte[] by1=s2.getBytes();
复制代码

这时的数组中就存了转换为字符为1,2,3的数组。实际上里面存的byte数据49,50,51.你在通过下面的遍历数组,打印出来就是49,50,51了。
    for(int x=0;x<by1.length;x++)
    {
            sop(by1[x]);
    }

如果还不清楚,给你看下面代码的执行结果你就明白了。
  1. System.out.println((char)49);
  2. System.out.println((char)50); System.out.println((char)51);
复制代码

结果输出1,2,3




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