1. 程式人生 > >byte[]陣列和int 之間的轉換

byte[]陣列和int 之間的轉換

&: 按位與,當兩位同時為1時才返回1。 1011 1010 & 1111 1111 = 1011 1010,還是得到是原值(類似位置對應)。

|:按位或,只要有一位為1即可返回1。1011 1010 0000 0000 | 1011 0101 = 1011 1010 1011 0101(位元組拼接)

>>:右移運算子,<<:左移運算子,移出去的被截斷,空出來的位以符號位進行填充。左移n位相當於乘以2的n次方,右移n位相當於除以2的n次方

package demos;

/**
 * Created by jiaobuchong on 2015/11/21.
 */
public class BytesToInt {
    /**
     * 低位在前, 高位在後, 將整型數字的每個位元組儲存到陣列中
     *
     * @param value
     * @return
     */
    public static byte[] intToBytes(int value) {
        byte[] des = new byte[4];
        des[0] = (byte) (value & 0xff);  // 低位(右邊)的8個bit位
        des[1] = (byte) ((value >> 8) & 0xff); //第二個8 bit位
        des[2] = (byte) ((value >> 16) & 0xff); //第三個 8 bit位
        /**
         * (byte)((value >> 24) & 0xFF);
         * value向右移動24位, 然後和0xFF也就是(11111111)進行與運算
         * 在記憶體中生成一個與 value 同類型的值
         * 然後把這個值強制轉換成byte型別, 再賦值給一個byte型別的變數 des[3]
         */
        des[3] = (byte) ((value >> 24) & 0xff); //第4個 8 bit位
        return des;
    }

    /**
     * 將上面轉成的byte陣列轉換成int原始值 
     * @param des
     * @param offset
     * @return
     */
    public static int bytesToInt(byte[] des, int offset) {
        int value;
        value = (int) (des[offset] & 0xff
                | ((des[offset + 1] & 0xff) << 8)
                | ((des[offset + 2] & 0xff) << 16)
                | (des[offset + 3] & 0xff) << 24);
        return value;
    }

    public static void main(String[] args) {
        byte[] res = intToBytes(30);
        System.out.println(bytesToInt(res, 0));  //30
    }
}
望同行多多指教。