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    }