001 package railo.commons.lang; 002 003 import railo.runtime.exp.ExpressionException; 004 005 public class NumberUtil { 006 public static int hexToInt(String s, int defaultValue) { 007 try { 008 return hexToInt(s); 009 } catch (ExpressionException e) { 010 return defaultValue; 011 } 012 } 013 public static int hexToInt(String s) throws ExpressionException { 014 int[] n = new int[s.length()]; 015 char c; 016 int sum = 0; 017 int koef = 1; 018 for(int i=n.length-1; i>=0; i--) { 019 c = s.charAt(i); 020 021 if(!((c>='0' && c<='9') || (c>='a' && c<='f'))) { 022 throw new ExpressionException("invalid hex constant ["+c+"], hex constants are [0-9,a-f]"); 023 } 024 025 //System.out.println(c); 026 switch (c) { 027 case 48: 028 n[i] = 0; 029 break; 030 case 49: 031 n[i] = 1; 032 break; 033 case 50: 034 n[i] = 2; 035 break; 036 case 51: 037 n[i] = 3; 038 break; 039 case 52: 040 n[i] = 4; 041 break; 042 case 53: 043 n[i] = 5; 044 break; 045 case 54: 046 n[i] = 6; 047 break; 048 case 55: 049 n[i] = 7; 050 break; 051 case 56: 052 n[i] = 8; 053 break; 054 case 57: 055 n[i] = 9; 056 break; 057 case 97: 058 n[i] = 10; 059 break; 060 case 98: 061 n[i] = 11; 062 break; 063 case 99: 064 n[i] = 12; 065 break; 066 case 100: 067 n[i] = 13; 068 break; 069 case 101: 070 n[i] = 14; 071 break; 072 case 102: 073 n[i] = 15; 074 break; 075 } 076 077 sum = sum + n[i]*koef; 078 koef=koef*16; 079 } 080 return sum; 081 } 082 public static byte[] longToByteArray(long l) { 083 byte[] ba=new byte[8]; 084 for(int i=0; i<64; i+=8) { 085 ba[i>>3] = new Long((l&(255L<<i))>>i).byteValue(); 086 } 087 return ba; 088 } 089 090 public static long byteArrayToLong(byte[] ba){ 091 long l=0; 092 for(int i=0; (i<8)&&(i<8); i++) { 093 l |= (((long)ba[i])<<(i<<3))&(255L<<(i<<3)); 094 } 095 return l; 096 } 097 public static int randomRange(int min, int max) { 098 return min + (int)(Math.random() * ((max - min) + 1)); 099 } 100 }