Conversion utilities : Data Type cast « Data Type « Java






Conversion utilities

   
/* 
 * Copyright (c) 2002,2003 Free Software Foundation
 * developed under the custody of the
 * Open Web Application Security Project
 * (http://www.owasp.org)
 * 
 * This file is part of the OWASP common library (OCL).
 * OCL is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * 
 * OCL is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 * 
 * The valid license text for this file can be retrieved with
 * the call:   java -cp owasp.jar org.owasp.LICENSE
 * 
 * If you are not able to view the LICENSE that way, which should
 * always be possible within a valid and working OCL release,
 * please write to the Free Software Foundation, Inc.,
 * 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 * to get a copy of the GNU General Public License or to report a
 * possible license violation.
 */

import java.util.Arrays;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

/** 
 * Conversion utilities.
 * 
 * @since beta 1
 * @version beta 1<br />CVS $Revision: 1.8 $ $Author: istr $
 * @author <a href="mailto:ingo@ingostruck.de">ingo@ingostruck.de</a>
 */
public final class Convert {
  /** Revision identifier */
  public static final String MODULE = "<Convert beta 1, CVS $Revision: 1.8 $>";
  /** to mimic sizeof(short) = short length in bytes = 12 (=16bit) */
  public static final int SIZEOF_SHORT = 2;
  /** to mimic sizeof(int) = int length in bytes = 4 (=32bit) */
  public static final int SIZEOF_INT = 4;
  /** to mimic sizeof(long) = long length in bytes = 8 (=64bit) */
  public static final int SIZEOF_LONG = 8;
  /** bit length of byte */
  public static final int BITS_BYTE = 8;
  /** bit length of short */
  public static final int BITS_SHORT = BITS_BYTE * SIZEOF_SHORT;
  /** bit length of int */
  public static final int BITS_INT = BITS_BYTE * SIZEOF_INT;
  /** bit length of long */
  public static final int BITS_LONG = BITS_BYTE * SIZEOF_LONG;
  /** mask a byte in an int */
  public static final int MASK_BYTE = 0xFF;
  
  /** Avoids instantiation */
  private Convert () {}

  /**
   * Converts the SIZEOF_LONG bytes starting at off within b to a long value.
   * <br />NOTE: the conversion treats the leftmost byte as the lowest byte of
   * the resulting long value
   * @param b a byte[] containing bytes to be converted
   * @param off the offset where to find the bytes to be converted
   * @return a long value
   * @throws IndexOutOfBoundsException if an index violation occurs
   */
  public static long toLong ( byte[] b, int off ) {
    long r = 0;
    for ( int i = SIZEOF_LONG - 1; i >= 0; i-- ) 
      r |= (((long) b[ off + i ]) & MASK_BYTE) << (i*BITS_BYTE);
    return r;
  }

  /**
   * Converts the SIZEOF_INT bytes starting at off within b to an int value.
   * <br />NOTE: the conversion treats the leftmost byte as the lowest byte of
   * the resulting int value
   * @param b a byte[] containing bytes to be converted
   * @param off the offset where to find the bytes to be converted
   * @return an int value
   * @throws IndexOutOfBoundsException if an index violation occurs
   */
  public static int toInt ( byte[] b, int off ) {
    int r = 0;
    for ( int i = SIZEOF_INT - 1; i >= 0; i-- ) 
      r |= ((int) (b[ off + i ] & MASK_BYTE)) << (i*BITS_BYTE);
    return r;
  }

  /**
   * Converts a long value to SIZEOF_LONG bytes stored in b starting at off.
   * <br />NOTE: the conversion stores the lowest byte of the long value as
   * the leftmost byte within the sequence
   * @param val a long value to be split up into bytes
   * @param b a byte[] to be written to
   * @param off the offset where to start writing within b
   * @throws IndexOutOfBoundsException if an index violation occurs
   */
  public static void toBytes ( long val, byte[] b, int off ) {
    for ( int i = 0; i < SIZEOF_LONG; i++, val >>= BITS_BYTE ) 
      b[ off + i ] = (byte) (val & MASK_BYTE);
  }
  
  /**
   * Converts an int value to SIZEOF_INT bytes stored in b starting at off.
   * <br />NOTE: the conversion stores the lowest byte of the int value as
   * the leftmost byte within the sequence
   * @param val an int value to be split up into bytes
   * @param b a byte[] to be written to
   * @param off the offset where to start writing within b
   * @throws IndexOutOfBoundsException if an index violation occurs
   */
  public static void toBytes ( int val, byte[] b, int off ) {
    for ( int i = 0; i < SIZEOF_INT; i++, val >>= BITS_BYTE ) 
      b[ off + i ] = (byte) (val & MASK_BYTE);
  }
  /**
   * Converts a byte value to a hexadecimal String.
   * @param b a byte value
   * @return a hexadecimal (upper-case-based) String representation of the
   * byte value
   */
  public static String toHexString ( byte b ) {
    int len = 2;
    byte[] dig = new byte[ len ];
    dig[ 0 ] = (byte) ((b & 0xF0) >> 4);
    dig[ 1 ] = (byte) (b & 0x0F);
    for ( int i = 0; i < len; i++ )
      dig[ i ] += 10 > dig[ i ] ? 48 : 55;
    return new String( dig );
  }

  public static String toHexString ( byte[] b ) {
    if ( null == b )
      return null;
    int len = b.length;
    byte[] hex = new byte[ len << 1 ];
    for ( int i = 0, j = 0; i < len; i++, j+=2 ) {
      hex[ j ] = (byte) ((b[ i ] & 0xF0) >> 4);
      hex[ j ] += 10 > hex[ j ] ? 48 : 55;
      hex[ j + 1 ] = (byte) (b[ i ] & 0x0F); 
      hex[ j + 1 ] += 10 > hex[ j + 1 ] ? 48 : 55;
    }
    return new String( hex );
  }

  /** 
   * Parses a number from a string.
   * Finds the first recognizable base-10 number (integer or floating point)
   * in the string and returns it as a Number.
   * @param string String to parse
   * @return first recognizable number
   * @exception NumberFormatException if no recognizable number is found
   */
  public static Number toNumber ( String s )
    throws NumberFormatException
  {
    // parsing states
    int INT = 0;
    int FRAC = 1;
    int EXP = 2;
    int p = 0;
    for ( int i = 0; i < s.length(); ++i ) {
      char c = s.charAt( i );
      if ( Character.isDigit( c ) ) {
        int start = i;
        int end = ++i;
        int state = INT;
        if ( start > 0 && s.charAt( start - 1 ) == '.' ) {
          --start;
          state = FRAC;
        }
        if ( start > 0 && s.charAt( start - 1 ) == '-' )
          --start;
        boolean atEnd = false;
        while ( !atEnd && i < s.length() ) {
          switch ( s.charAt( i ) ) {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
              end = ++i;
              break;
            case '.':
              if ( state == INT ) {
                state = FRAC;
                ++i;
              } else {
                atEnd = true;
              }
              break;
            case 'e':
            case 'E':
              state = EXP;
              ++i;
              if ( i < s.length() && ((c = s.charAt( i )) == '+' || c == '-') )
                ++i;
              break;
            default:
              atEnd = true;
          }
        }
        String num = s.substring( start, end );
        try {
          if ( state == INT )
            return new Integer( num );
          else
            return new Double( num );
        } 
        catch ( NumberFormatException e ) {
          throw new RuntimeException( "internal error: " + e );
        }
      }
    }
    throw new NumberFormatException( s );
  }

  public static String[] toStrings( Object[] o ) {
    if ( null == o )
      return null;
    int len = o.length;
    String[] s = new String[ len ];
    for ( int i = 0; i < len; i++ )
      if ( null != o[ i ] )
        s[ i ] = o[ i ].toString();
    return s;
  }

  /** converts to int with radix 10 and default 0 */
  public static int toInt ( Object o ) {
    return toInt( o, 10, 0 );
  }

  /**
   * Convets an Object to an int value using radix 10.
   * <br />This is a wrapper for
   * <code>{@link #toInt( Object, int ) toInt( o, 10 )}</code>.
   * @param o Object to be converted to integer
   * @return the int value represented by o or 0 if conversion fails.
   */
  public static int toInt ( Object o, int dflt ) {
    return toInt( o, 10, dflt );
  }

  /**
   * Converts any String representation to an int value using a given radix.
   * <br />For <code>null</code> it returns <code>0</code>.<br />
   * For Objects instanceof Number it returns the Object's
   * <code>intValue()</code>.
   * For all other Objects it uses the <code>toString()</code> method to get an
   * appropriate String representation and parses this String using
   * <code>Integer.parseInt</code>.
   * If conversion fails it returns <code>0</code>.
   * @param o Object to be converted to integer
   * @param radix the radix used for conversion
   * @return the int value represented by <code>o</code> or <code>0</code>
   * if conversion fails.
   */
  public static int toInt ( Object o, int radix, int dflt ) {
    if ( null == o ) // shortcut without exception
      return dflt;
    if ( o instanceof Number )
      return ((Number) o).intValue();
    try {
      return Integer.parseInt( o.toString().trim(), radix );
    }
    catch ( Exception e ) {
      return dflt;
    }
  }

  public static long toLong ( Object o ) {
    return toLong( o, 10, 0 );
  }

  public static long toLong ( Object o, int dflt ) {
    return toLong( o, 10, dflt );
  }

  public static long toLong ( Object o, int radix, int dflt ) {
    if ( null == o ) // shortcut without exception
      return dflt;
    if ( o instanceof Number )
      return ((Number) o).longValue();
    try {
      return Long.parseLong( o.toString().trim(), radix );
    }
    catch ( Exception e ) {
      return dflt;
    }
  }

} // class Convert

   
    
    
  








Related examples in the same category

1.Cast a float or double to an integral valueCast a float or double to an integral value
2.A simple casting demo
3.Casting Demo
4.Get the minimum and maximum value of a primitive data types?
5.Class with methods for type conversion
6.Data type conversion
7.Data type Conversion Util
8.Convert Byte array to Int
9.Convert Number To Target Class
10.Convert byte array to Long
11.Convert long to Bytes
12.Get Time From Date
13.Get String From Date
14.A method used to build a date for use Marker XML and KML data
15.A method used to build a date for display in line with existing formatting rules