private static void decodeHanziSegment(BitSource bits,StringBuilder result,int count) throws FormatException {
  if (count * 13 > bits.available()) {
    throw FormatException.getFormatInstance();
  }
  byte[] buffer=new byte[2 * count];
  int offset=0;
  while (count > 0) {
    int twoBytes=bits.readBits(13);
    int assembledTwoBytes=((twoBytes / 0x060) << 8) | (twoBytes % 0x060);
    if (assembledTwoBytes < 0x003BF) {
      assembledTwoBytes+=0x0A1A1;
    }
 else {
      assembledTwoBytes+=0x0A6A1;
    }
    buffer[offset]=(byte)((assembledTwoBytes >> 8) & 0xFF);
    buffer[offset + 1]=(byte)(assembledTwoBytes & 0xFF);
    offset+=2;
    count--;
  }
  try {
    result.append(new String(buffer,StringUtils.GB2312));
  }
 catch (  UnsupportedEncodingException ignored) {
    throw FormatException.getFormatInstance();
  }
}

private static void decodeHanziSegment ( BitSource bits , StringBuilder result , int count ) throws FormatException { if ( count * 13 > bits . available ( ) ) { throw FormatException . getFormatInstance ( ) ; } byte [ ] buffer = new byte [ 2 * count ] ; int offset = 0 ; while ( count > 0 ) { int twoBytes = bits . readBits ( 13 ) ; int assembledTwoBytes = ( ( twoBytes / 0x060 ) << 8 ) | ( twoBytes % 0x060 ) ; if ( assembledTwoBytes < 0x003BF ) { assembledTwoBytes += 0x0A1A1 ; } else { assembledTwoBytes += 0x0A6A1 ; } buffer [ offset ] = ( byte ) ( ( assembledTwoBytes > > 8 ) & 0xFF ) ; buffer [ offset + 1 ] = ( byte ) ( assembledTwoBytes & 0xFF ) ; offset += 2 ; count -- ; } try { result . append ( new String ( buffer , StringUtils . GB2312 ) ) ; } catch ( UnsupportedEncodingException ignored ) { throw FormatException . getFormatInstance ( ) ; } }
see specification gbt 18284 - 2000
