java中byte數組與int,long,short間的轉換

    package com.util;  
      
    /** 
     *  
     * <ul> 
     * <li>文件名稱: com.born.util.ByteUtil.java</li> 
     * <li>文件描述: byte轉換工具</li> 
     * <li>版權所有: 版權所有(C)2001-2006</li> 
     * <li>公 司: bran</li> 
     * <li>內容摘要:</li> 
     * <li>其他說明:</li> 
     * <li>完成日期:2011-7-18</li> 
     * <li>修改記錄0:無</li> 
     * </ul> 
     *  
     * @version 1.0 
     * @author 許力多 
     */  
    public class ByteUtil {  
        /** 
         * 轉換short爲byte 
         *  
         * @param b 
         * @param s 
         *            需要轉換的short 
         * @param index 
         */  
        public static void putShort(byte b[], short s, int index) {  
            b[index + 1] = (byte) (s >> 8);  
            b[index + 0] = (byte) (s >> 0);  
        }  
      
        /** 
         * 通過byte數組取到short 
         *  
         * @param b 
         * @param index 
         *            第幾位開始取 
         * @return 
         */  
        public static short getShort(byte[] b, int index) {  
            return (short) (((b[index + 1] << 8) | b[index + 0] & 0xff));  
        }  
      
        /** 
         * 轉換int爲byte數組 
         *  
         * @param bb 
         * @param x 
         * @param index 
         */  
        public static void putInt(byte[] bb, int x, int index) {  
            bb[index + 3] = (byte) (x >> 24);  
            bb[index + 2] = (byte) (x >> 16);  
            bb[index + 1] = (byte) (x >> 8);  
            bb[index + 0] = (byte) (x >> 0);  
        }  
      
        /** 
         * 通過byte數組取到int 
         *  
         * @param bb 
         * @param index 
         *            第幾位開始 
         * @return 
         */  
        public static int getInt(byte[] bb, int index) {  
            return (int) ((((bb[index + 3] & 0xff) << 24)  
                    | ((bb[index + 2] & 0xff) << 16)  
                    | ((bb[index + 1] & 0xff) << 8) | ((bb[index + 0] & 0xff) << 0)));  
        }  
      
        /** 
         * 轉換long型爲byte數組 
         *  
         * @param bb 
         * @param x 
         * @param index 
         */  
        public static void putLong(byte[] bb, long x, int index) {  
            bb[index + 7] = (byte) (x >> 56);  
            bb[index + 6] = (byte) (x >> 48);  
            bb[index + 5] = (byte) (x >> 40);  
            bb[index + 4] = (byte) (x >> 32);  
            bb[index + 3] = (byte) (x >> 24);  
            bb[index + 2] = (byte) (x >> 16);  
            bb[index + 1] = (byte) (x >> 8);  
            bb[index + 0] = (byte) (x >> 0);  
        }  
      
        /** 
         * 通過byte數組取到long 
         *  
         * @param bb 
         * @param index 
         * @return 
         */  
        public static long getLong(byte[] bb, int index) {  
            return ((((long) bb[index + 7] & 0xff) << 56)  
                    | (((long) bb[index + 6] & 0xff) << 48)  
                    | (((long) bb[index + 5] & 0xff) << 40)  
                    | (((long) bb[index + 4] & 0xff) << 32)  
                    | (((long) bb[index + 3] & 0xff) << 24)  
                    | (((long) bb[index + 2] & 0xff) << 16)  
                    | (((long) bb[index + 1] & 0xff) << 8) | (((long) bb[index + 0] & 0xff) << 0));  
        }  
      
        /** 
         * 字符到字節轉換 
         *  
         * @param ch 
         * @return 
         */  
        public static void putChar(byte[] bb, char ch, int index) {  
            int temp = (int) ch;  
            // byte[] b = new byte[2];  
            for (int i = 0; i < 2; i ++ ) {  
                bb[index + i] = new Integer(temp & 0xff).byteValue(); // 將最高位保存在最低位  
                temp = temp >> 8; // 向右移8位  
            }  
        }  
      
        /** 
         * 字節到字符轉換 
         *  
         * @param b 
         * @return 
         */  
        public static char getChar(byte[] b, int index) {  
            int s = 0;  
            if (b[index + 1] > 0)  
                s += b[index + 1];  
            else  
                s += 256 + b[index + 0];  
            s *= 256;  
            if (b[index + 0] > 0)  
                s += b[index + 1];  
            else  
                s += 256 + b[index + 0];  
            char ch = (char) s;  
            return ch;  
        }  
      
        /** 
         * float轉換byte 
         *  
         * @param bb 
         * @param x 
         * @param index 
         */  
        public static void putFloat(byte[] bb, float x, int index) {  
            // byte[] b = new byte[4];  
            int l = Float.floatToIntBits(x);  
            for (int i = 0; i < 4; i++) {  
                bb[index + i] = new Integer(l).byteValue();  
                l = l >> 8;  
            }  
        }  
      
        /** 
         * 通過byte數組取得float 
         *  
         * @param bb 
         * @param index 
         * @return 
         */  
        public static float getFloat(byte[] b, int index) {  
            int l;  
            l = b[index + 0];  
            l &= 0xff;  
            l |= ((long) b[index + 1] << 8);  
            l &= 0xffff;  
            l |= ((long) b[index + 2] << 16);  
            l &= 0xffffff;  
            l |= ((long) b[index + 3] << 24);  
            return Float.intBitsToFloat(l);  
        }  
      
        /** 
         * double轉換byte 
         *  
         * @param bb 
         * @param x 
         * @param index 
         */  
        public static void putDouble(byte[] bb, double x, int index) {  
            // byte[] b = new byte[8];  
            long l = Double.doubleToLongBits(x);  
            for (int i = 0; i < 4; i++) {  
                bb[index + i] = new Long(l).byteValue();  
                l = l >> 8;  
            }  
        }  
      
        /** 
         * 通過byte數組取得float 
         *  
         * @param bb 
         * @param index 
         * @return 
         */  
        public static double getDouble(byte[] b, int index) {  
            long l;  
            l = b[0];  
            l &= 0xff;  
            l |= ((long) b[1] << 8);  
            l &= 0xffff;  
            l |= ((long) b[2] << 16);  
            l &= 0xffffff;  
            l |= ((long) b[3] << 24);  
            l &= 0xffffffffl;  
            l |= ((long) b[4] << 32);  
            l &= 0xffffffffffl;  
            l |= ((long) b[5] << 40);  
            l &= 0xffffffffffffl;  
            l |= ((long) b[6] << 48);  
            l &= 0xffffffffffffffl;  
            l |= ((long) b[7] << 56);  
            return Double.longBitsToDouble(l);  
        }  
    }  


發佈了34 篇原創文章 · 獲贊 39 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章