protected int packValues ( String values ) { int i , n = values . length ( ) ; int m = ( n & 1 ) == 1 ? ( n >> 1 ) + 2 : ( n >> 1 ) + 1 ; int offset = vspace . alloc ( m ) ; byte [ ] va = vspace . getArray ( ) ; for ( i = 0 ; i < n ; i ++ ) { int j = i >> 1 ; byte v = ( byte ) ( ( values . charAt ( i ) - ' ' + 1 ) & 0x0f ) ; if ( ( i & 1 ) == 1 ) { va [ j + offset ] = ( byte ) ( va [ j + offset ] | v ) ; } else { va [ j + offset ] = ( byte ) ( v << 4 ) ; // big endian } } va [ m - 1 + offset ] = 0 ; // terminator return offset ; }
Packs the values by storing them in 4 bits two values into a byte Values range is from 0 to 9 . We use zero as terminator so we ll add 1 to the value .