Mega Code Archive

 
Categories / Java / File Input Output
 

Convert the bytes within the specified range of the given byte array into a signed integer in the given radix

/*  * The contents of this file are subject to the terms   * of the Common Development and Distribution License   * (the "License").  You may not use this file except   * in compliance with the License.  *   * You can obtain a copy of the license at   * glassfish/bootstrap/legal/CDDLv1.0.txt or   * https://glassfish.dev.java.net/public/CDDLv1.0.html.   * See the License for the specific language governing   * permissions and limitations under the License.  *   * When distributing Covered Code, include this CDDL   * HEADER in each file and include the License file at   * glassfish/bootstrap/legal/CDDLv1.0.txt.  If applicable,   * add the following below this CDDL HEADER, with the   * fields enclosed by brackets "[]" replaced with your   * own identifying information: Portions Copyright [yyyy]   * [name of copyright owner]  */ /*  * @(#)ASCIIUtility.java  1.10 05/08/29  *  * Copyright 1997-2005 Sun Microsystems, Inc. All Rights Reserved.  */ public class Utils {   /**    * Convert the bytes within the specified range of the given byte array into a    * signed integer in the given radix . The range extends from    * <code>start</code> till, but not including <code>end</code>.    * <p>    *     * Based on java.lang.Integer.parseInt()    */   public static int parseInt(byte[] b, int start, int end, int radix) throws NumberFormatException {     if (b == null)       throw new NumberFormatException("null");     int result = 0;     boolean negative = false;     int i = start;     int limit;     int multmin;     int digit;     if (end > start) {       if (b[i] == '-') {         negative = true;         limit = Integer.MIN_VALUE;         i++;       } else {         limit = -Integer.MAX_VALUE;       }       multmin = limit / radix;       if (i < end) {         digit = Character.digit((char) b[i++], radix);         if (digit < 0) {           throw new NumberFormatException("illegal number: " + toString(b, start, end));         } else {           result = -digit;         }       }       while (i < end) {         // Accumulating negatively avoids surprises near MAX_VALUE         digit = Character.digit((char) b[i++], radix);         if (digit < 0) {           throw new NumberFormatException("illegal number");         }         if (result < multmin) {           throw new NumberFormatException("illegal number");         }         result *= radix;         if (result < limit + digit) {           throw new NumberFormatException("illegal number");         }         result -= digit;       }     } else {       throw new NumberFormatException("illegal number");     }     if (negative) {       if (i > start + 1) {         return result;       } else { /* Only got "-" */         throw new NumberFormatException("illegal number");       }     } else {       return -result;     }   }   /**    * Convert the bytes within the specified range of the given byte array into a    * String. The range extends from <code>start</code> till, but not including    * <code>end</code>.    * <p>    */   public static String toString(byte[] b, int start, int end) {     int size = end - start;     char[] theChars = new char[size];     for (int i = 0, j = start; i < size;)       theChars[i++] = (char) (b[j++] & 0xff);     return new String(theChars);   } }