@@ -98,12 +98,10 @@ public static int decodeHex(final char[] data, final byte[] out, final int outOf
9898 throw new DecoderException ("Output array is not large enough to accommodate decoded data." );
9999 }
100100 // two characters form the hex value.
101- for (int i = outOffset , j = 0 ; j < len ; i ++) {
102- int f = toDigit (data [j ], j ) << 4 ;
103- j ++;
104- f |= toDigit (data [j ], j );
105- j ++;
106- out [i ] = (byte ) (f & 0xFF );
101+ for (int i = 0 , j = outOffset ; i < len ; i += 2 , j ++) {
102+ final int high = toDigit (data [i ], i ) << 4 ;
103+ final int low = toDigit (data [i + 1 ], i + 1 );
104+ out [j ] = (byte ) (high | low );
107105 }
108106 return outLen ;
109107 }
@@ -207,9 +205,11 @@ public static void encodeHex(final byte[] data, final int dataOffset, final int
207205 */
208206 private static char [] encodeHex (final byte [] data , final int dataOffset , final int dataLen , final char [] toDigits , final char [] out , final int outOffset ) {
209207 // two characters form the hex value.
210- for (int i = dataOffset , j = outOffset ; i < dataOffset + dataLen ; i ++) {
211- out [j ++] = toDigits [(0xF0 & data [i ]) >>> 4 ];
212- out [j ++] = toDigits [0x0F & data [i ]];
208+ final int end = dataOffset + dataLen ;
209+ for (int i = dataOffset , j = outOffset ; i < end ; i ++) {
210+ final byte value = data [i ];
211+ out [j ++] = toDigits [value >> 4 & 0x0f ];
212+ out [j ++] = toDigits [value & 0x0f ];
213213 }
214214 return out ;
215215 }
0 commit comments