字符串如下:String msg = "445       0060   操作成功!                                                   400161";
byte[] bytes = s.getBytes();
如从bytes的0位开始截取,往后截10位因为:
445       (包含空格)如从bytes的17位开始截取,往后截60位因为:
操作成功!                                                   (包含空格,一个汉字占两个字节)如从bytes的17位开始截取,往后截61位因为:
操作成功!                                                   4(包含空格,一个汉字占两个字节)

解决方案 »

  1.   


    public byte[] subBytes(byte[] src, int begin, int count) {
    byte[] bs = new byte[count];
    for (int i=begin; i<begin+count; i++) bs[i-begin] = src[i];
    return bs;
    }
    String msg = "445       0060   操作成功!                                                   400161";
    byte[] bytes = s.getBytes();
    byte[] newBytes =  subBytes(bytes,17,60);
      

  2.   


    我的意思是,将String转换为byte数组后。
    让后再取数组中的某段的数据,字符串中有中文,转换为byte后一个中文占两个字节。
    String msg = "445       0060   操作成功!                                                   400161";实际上:操作成功!                                                   (这只有56个字符)
    转换byte后一个中文占2个字节,这是它的站位为60个字节。
    我取出这个60个字节转换String后少了4位。
    2楼的方法会出现这样的问题
      

  3.   

    一个60位长的byte[]数组,如果其中包括有4个汉字,用它转换而成的String对象的长度只有56.
    这是因为String.length()方法是计算char的个数,无论汉字,字母还是英文都算1个char这是char和byte的区别造成的
      

  4.   

    UTF8一个汉字占3个字节
    你是用什么字符集来编码
      

  5.   

    这个啊  
    byte y=new byte();
    等哈哈我回去拿我电脑给你做了发给你