java--byte與基礎類型轉換


byte b[]={0x41,(byte) 0xc8,0,0}; 
//方法1 流輸入,適用於ME/SE環境
//默認大端數,如果小端數,可以先翻轉數組
DataInputStream dis=new DataInputStream(new ByteArrayInputStream(b));
float f=dis.readFloat();
dis.close();
System.out.println(f);

//方法2 緩存輸入,適用於SE/EE環境
ByteBuffer buf=ByteBuffer.allocateDirect(4); //無額外內存的直接緩存
//buf=buf.order(ByteOrder.LITTLE_ENDIAN);//默認大端,小端用這行
buf.put(b);
buf.rewind();
float f2=buf.getFloat();
System.out.println(f2);
//方法三,自定義工具類
package cn.yuehua.io;

/**
 * byte[] 轉換
 * 采用大端順序,即對於0x11223344,byte[0]保存0x11,byte[1]保存0x22,byte[2]保存0x33,byte[3]保存0x44
 */
public class ByteArrayConveter {
    //char -> byte[2]
    public static byte[] getByteArray(char c){
        byte[] b = new byte[2];
        b[0] = (byte)((c & 0xff00) >> 8);
        b[1] = (byte)(c & 0x00ff);
        return b;
    }
    // 從byte數組的index處的連續兩個字節獲得一個char
    public static char getChar(byte[] arr, int index) {
        return (char) (0xff00 & arr[index] << 8 | (0xff & arr[index + 1]));
    }
    // short轉換為byte[2]數組
    public static byte[] getByteArray(short s) {
        byte[] b = new byte[2];
        b[0] = (byte) ((s & 0xff00) >> 8);
        b[1] = (byte) (s & 0x00ff);
        return b;
    }
    // 從byte數組的index處的連續兩個字節獲得一個short
    public static short getShort(byte[] arr, int index) {
        return (short) (0xff00 & arr[index] << 8 | (0xff & arr[index + 1]));
    }
    // int轉換為byte[4]數組
    public static byte[] getByteArray(int i) {
        byte[] b = new byte[4];
        b[0] = (byte) ((i & 0xff000000) >> 24);
        b[1] = (byte) ((i & 0x00ff0000) >> 16);
        b[2] = (byte) ((i & 0x0000ff00) >> 8);
        b[3] = (byte)  (i & 0x000000ff);
        return b;
    }
    // 從byte數組的index處的連續4個字節獲得一個int
    public static int getInt(byte[] arr, int index) {
        return     (0xff000000     & (arr[index+0] << 24))  |
                (0x00ff0000     & (arr[index+1] << 16))  |
                (0x0000ff00     & (arr[index+2] << 8))   |
                (0x000000ff     &  arr[index+3]);
    }
    // float轉換為byte[4]數組
    public static byte[] getByteArray(float f) {
        int intbits = Float.floatToIntBits(f);//將float里面的二進制串解釋為int整數
        return getByteArray(intbits);
    }
    // 從byte數組的index處的連續4個字節獲得一個float
    public static float getFloat(byte[] arr, int index) {
        return Float.intBitsToFloat(getInt(arr, index));
    }
    // long轉換為byte[8]數組
    public static byte[] getByteArray(long l) {
        byte b[] = new byte[8];
        b[0] = (byte)  (0xff & (l >> 56));
        b[1] = (byte)  (0xff & (l >> 48));
        b[2] = (byte)  (0xff & (l >> 40));
        b[3] = (byte)  (0xff & (l >> 32));
        b[4] = (byte)  (0xff & (l >> 24));
        b[5] = (byte)  (0xff & (l >> 16));
        b[6] = (byte)  (0xff & (l >> 8));
        b[7] = (byte)  (0xff & l);
        return b;
    }
    // 從byte數組的index處的連續8個字節獲得一個long
    public static long getLong(byte[] arr, int index) {
        return     (0xff00000000000000L     & ((long)arr[index+0] << 56))  |
                (0x00ff000000000000L     & ((long)arr[index+1] << 48))  |
                (0x0000ff0000000000L     & ((long)arr[index+2] << 40))  |
                (0x000000ff00000000L     & ((long)arr[index+3] << 32))  |
                (0x00000000ff000000L     & ((long)arr[index+4] << 24))  |
                (0x0000000000ff0000L     & ((long)arr[index+5] << 16))  |
                (0x000000000000ff00L     & ((long)arr[index+6] << 8))   |
                (0x00000000000000ffL     &  (long)arr[index+7]);
    }
    // double轉換為byte[8]數組
    public static byte[] getByteArray(double d) {
        long longbits = Double.doubleToLongBits(d);
        return getByteArray(longbits);
    }
    // 從byte數組的index處的連續8個字節獲得一個double
    public static double getDouble(byte[] arr, int index) {
        return Double.longBitsToDouble(getLong(arr, index));
    }


    public static void main(String[] args) {
        float f = 11.9f;
        byte[] byteArray = getByteArray(f);
        float aFloat = getFloat(byteArray, 0);
        System.out.println(aFloat);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM