最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)基本數(shù)據(jù)類型與byte數(shù)組相互轉(zhuǎn)換

 更新時(shí)間:2025年12月22日 09:28:14   作者:牛肉胡辣湯  
在編程中,尤其是在網(wǎng)絡(luò)通信、文件讀寫等場(chǎng)景下,經(jīng)常需要將基本數(shù)據(jù)類型(如int、long、double等)轉(zhuǎn)換為字節(jié)數(shù)組(byte?array),本文將詳細(xì)介紹Java中如何實(shí)現(xiàn)這些轉(zhuǎn)換,感興趣的可以了解下

在編程中,尤其是在網(wǎng)絡(luò)通信、文件讀寫等場(chǎng)景下,經(jīng)常需要將基本數(shù)據(jù)類型(如int、long、double等)轉(zhuǎn)換為字節(jié)數(shù)組(byte array),或者從字節(jié)數(shù)組中恢復(fù)基本數(shù)據(jù)類型。本文將詳細(xì)介紹Java中如何實(shí)現(xiàn)這些轉(zhuǎn)換。

1. 基本數(shù)據(jù)類型轉(zhuǎn)byte數(shù)組

1.1 int轉(zhuǎn)byte數(shù)組

將一個(gè)??int??類型的值轉(zhuǎn)換為??byte??數(shù)組,可以使用位運(yùn)算來(lái)實(shí)現(xiàn):

public static byte[] intToBytes(int value) {
    return new byte[]{
        (byte) (value >>> 24),
        (byte) (value >>> 16),
        (byte) (value >>> 8),
        (byte) value
    };
}

1.2 long轉(zhuǎn)byte數(shù)組

將一個(gè)??long??類型的值轉(zhuǎn)換為??byte??數(shù)組,同樣可以使用位運(yùn)算:

public static byte[] longToBytes(long value) {
    return new byte[]{
        (byte) (value >>> 56),
        (byte) (value >>> 48),
        (byte) (value >>> 40),
        (byte) (value >>> 32),
        (byte) (value >>> 24),
        (byte) (value >>> 16),
        (byte) (value >>> 8),
        (byte) value
    };
}

1.3 double轉(zhuǎn)byte數(shù)組

將一個(gè)??double??類型的值轉(zhuǎn)換為??byte??數(shù)組,可以先將其轉(zhuǎn)換為??long??,然后再使用上述方法:

public static byte[] doubleToBytes(double value) {
    long longValue = Double.doubleToLongBits(value);
    return longToBytes(longValue);
}

2. byte數(shù)組轉(zhuǎn)基本數(shù)據(jù)類型

2.1 byte數(shù)組轉(zhuǎn)int

將一個(gè)??byte??數(shù)組轉(zhuǎn)換為??int??類型的值,可以使用位運(yùn)算和移位操作:

public static int bytesToInt(byte[] bytes) {
    return (bytes[0] << 24) |
           (bytes[1] << 16) |
           (bytes[2] << 8)  |
           (bytes[3]);
}

2.2 byte數(shù)組轉(zhuǎn)long

將一個(gè)??byte??數(shù)組轉(zhuǎn)換為??long??類型的值,同樣可以使用位運(yùn)算和移位操作:

public static long bytesToLong(byte[] bytes) {
    return ((long) bytes[0] << 56) |
           ((long) bytes[1] << 48) |
           ((long) bytes[2] << 40) |
           ((long) bytes[3] << 32) |
           ((long) bytes[4] << 24) |
           ((long) bytes[5] << 16) |
           ((long) bytes[6] << 8)  |
           ((long) bytes[7]);
}

2.3 byte數(shù)組轉(zhuǎn)double

將一個(gè)??byte??數(shù)組轉(zhuǎn)換為??double??類型的值,可以先將其轉(zhuǎn)換為??long??,然后再使用??Double.longBitsToDouble??方法:

public static double bytesToDouble(byte[] bytes) {
    long longValue = bytesToLong(bytes);
    return Double.longBitsToDouble(longValue);
}

3. 示例代碼

以下是一個(gè)完整的示例代碼,展示了如何使用上述方法進(jìn)行基本數(shù)據(jù)類型和??byte??數(shù)組之間的轉(zhuǎn)換:

public class DataTypeConversion {

    public static void main(String[] args) {
        // int to byte array
        int intValue = 123456;
        byte[] intBytes = intToBytes(intValue);
        System.out.println("int to byte array: " + bytesToHex(intBytes));

        // byte array to int
        int intValueFromBytes = bytesToInt(intBytes);
        System.out.println("byte array to int: " + intValueFromBytes);

        // long to byte array
        long longValue = 1234567890123456789L;
        byte[] longBytes = longToBytes(longValue);
        System.out.println("long to byte array: " + bytesToHex(longBytes));

        // byte array to long
        long longValueFromBytes = bytesToLong(longBytes);
        System.out.println("byte array to long: " + longValueFromBytes);

        // double to byte array
        double doubleValue = 123.456;
        byte[] doubleBytes = doubleToBytes(doubleValue);
        System.out.println("double to byte array: " + bytesToHex(doubleBytes));

        // byte array to double
        double doubleValueFromBytes = bytesToDouble(doubleBytes);
        System.out.println("byte array to double: " + doubleValueFromBytes);
    }

    public static byte[] intToBytes(int value) {
        return new byte[]{
            (byte) (value >>> 24),
            (byte) (value >>> 16),
            (byte) (value >>> 8),
            (byte) value
        };
    }

    public static byte[] longToBytes(long value) {
        return new byte[]{
            (byte) (value >>> 56),
            (byte) (value >>> 48),
            (byte) (value >>> 40),
            (byte) (value >>> 32),
            (byte) (value >>> 24),
            (byte) (value >>> 16),
            (byte) (value >>> 8),
            (byte) value
        };
    }

    public static byte[] doubleToBytes(double value) {
        long longValue = Double.doubleToLongBits(value);
        return longToBytes(longValue);
    }

    public static int bytesToInt(byte[] bytes) {
        return (bytes[0] << 24) |
               (bytes[1] << 16) |
               (bytes[2] << 8)  |
               (bytes[3]);
    }

    public static long bytesToLong(byte[] bytes) {
        return ((long) bytes[0] << 56) |
               ((long) bytes[1] << 48) |
               ((long) bytes[2] << 40) |
               ((long) bytes[3] << 32) |
               ((long) bytes[4] << 24) |
               ((long) bytes[5] << 16) |
               ((long) bytes[6] << 8)  |
               ((long) bytes[7]);
    }

    public static double bytesToDouble(byte[] bytes) {
        long longValue = bytesToLong(bytes);
        return Double.longBitsToDouble(longValue);
    }

    public static String bytesToHex(byte[] bytes) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(0xFF & b);
            if (hex.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hex);
        }
        return hexString.toString();
    }
}

以上是關(guān)于基本數(shù)據(jù)類型與??byte??數(shù)組相互轉(zhuǎn)化的技術(shù)博客文章。希望對(duì)你有所幫助!

4.方法補(bǔ)充

在Java中,基本數(shù)據(jù)類型(如int、float、double等)和byte數(shù)組之間的轉(zhuǎn)換是常見(jiàn)的需求,尤其是在網(wǎng)絡(luò)通信、文件讀寫等場(chǎng)景中。下面我將分別給出幾個(gè)示例,展示如何將基本數(shù)據(jù)類型轉(zhuǎn)換為byte數(shù)組,以及如何從byte數(shù)組恢復(fù)基本數(shù)據(jù)類型。

1. int 和 byte[] 的轉(zhuǎn)換

int 轉(zhuǎn)換為 byte[]

public class IntToByteArray {
    public static void main(String[] args) {
        int number = 123456789;
        byte[] bytes = new byte[4];
        
        // 將int轉(zhuǎn)換為byte數(shù)組
        for (int i = 0; i < 4; i++) {
            bytes[i] = (byte) ((number >> (i * 8)) & 0xFF);
        }
        
        System.out.println("Byte array: " + Arrays.toString(bytes));
    }
}

byte[] 轉(zhuǎn)換為 int

public class ByteArrayToInt {
    public static void main(String[] args) {
        byte[] bytes = { -86, 46, -42, 77 }; // 這個(gè)數(shù)組是從上面的例子得到的
        int number = 0;
        
        // 將byte數(shù)組轉(zhuǎn)換為int
        for (int i = 0; i < 4; i++) {
            number |= (bytes[i] & 0xFF) << (i * 8);
        }
        
        System.out.println("Number: " + number);
    }
}

2. float 和 byte[] 的轉(zhuǎn)換

float 轉(zhuǎn)換為 byte[]

public class FloatToByteArray {
    public static void main(String[] args) {
        float number = 3.14f;
        byte[] bytes = new byte[4];
        
        // 將float轉(zhuǎn)換為byte數(shù)組
        ByteBuffer buffer = ByteBuffer.allocate(4);
        buffer.putFloat(number);
        buffer.flip(); // 翻轉(zhuǎn)緩沖區(qū)
        buffer.get(bytes);
        
        System.out.println("Byte array: " + Arrays.toString(bytes));
    }
}

byte[] 轉(zhuǎn)換為 float

public class ByteArrayToFloat {
    public static void main(String[] args) {
        byte[] bytes = { 64, 9, 21, 115 }; // 這個(gè)數(shù)組是從上面的例子得到的
        float number = 0.0f;
        
        // 將byte數(shù)組轉(zhuǎn)換為float
        ByteBuffer buffer = ByteBuffer.wrap(bytes);
        number = buffer.getFloat();
        
        System.out.println("Number: " + number);
    }
}

3. double 和 byte[] 的轉(zhuǎn)換

double 轉(zhuǎn)換為 byte[]

public class DoubleToByteArray {
    public static void main(String[] args) {
        double number = 3.141592653589793;
        byte[] bytes = new byte[8];
        
        // 將double轉(zhuǎn)換為byte數(shù)組
        ByteBuffer buffer = ByteBuffer.allocate(8);
        buffer.putDouble(number);
        buffer.flip(); // 翻轉(zhuǎn)緩沖區(qū)
        buffer.get(bytes);
        
        System.out.println("Byte array: " + Arrays.toString(bytes));
    }
}

byte[] 轉(zhuǎn)換為 double

public class ByteArrayToDouble {
    public static void main(String[] args) {
        byte[] bytes = { 64, 9, 21, 115, -31, -11, -10, -21 }; // 這個(gè)數(shù)組是從上面的例子得到的
        double number = 0.0;
        
        // 將byte數(shù)組轉(zhuǎn)換為double
        ByteBuffer buffer = ByteBuffer.wrap(bytes);
        number = buffer.getDouble();
        
        System.out.println("Number: " + number);
    }
}

在Java中,基本數(shù)據(jù)類型(如??int???, ??double???, ??char???, ??boolean???等)和??byte[]??之間的轉(zhuǎn)換是一個(gè)常見(jiàn)的需求,尤其是在處理網(wǎng)絡(luò)通信、文件讀寫或加密解密時(shí)。下面將詳細(xì)介紹如何在Java中實(shí)現(xiàn)這些轉(zhuǎn)換。

1. 基本數(shù)據(jù)類型轉(zhuǎn) ??byte[]??

1.1 ??int?? 轉(zhuǎn) ??byte[]??

public static byte[] intToByteArray(int value) {
    return new byte[] {
        (byte)((value >> 24) & 0xFF),
        (byte)((value >> 16) & 0xFF),
        (byte)((value >> 8) & 0xFF),
        (byte)(value & 0xFF)
    };
}

1.2 ??long?? 轉(zhuǎn) ??byte[]??

public static byte[] longToByteArray(long value) {
    return new byte[] {
        (byte)((value >> 56) & 0xFF),
        (byte)((value >> 48) & 0xFF),
        (byte)((value >> 40) & 0xFF),
        (byte)((value >> 32) & 0xFF),
        (byte)((value >> 24) & 0xFF),
        (byte)((value >> 16) & 0xFF),
        (byte)((value >> 8) & 0xFF),
        (byte)(value & 0xFF)
    };
}

1.3 ??float?? 轉(zhuǎn) ??byte[]??

public static byte[] floatToByteArray(float value) {
    return intToByteArray(Float.floatToIntBits(value));
}

1.4 ??double?? 轉(zhuǎn) ??byte[]??

public static byte[] doubleToByteArray(double value) {
    return longToByteArray(Double.doubleToLongBits(value));
}

1.5 ??char?? 轉(zhuǎn) ??byte[]??

public static byte[] charToByteArray(char value) {
    return new byte[] {
        (byte)((value >> 8) & 0xFF),
        (byte)(value & 0xFF)
    };
}

1.6 ??boolean?? 轉(zhuǎn) ??byte[]??

public static byte[] booleanToByteArray(boolean value) {
    return new byte[] { (byte)(value ? 1 : 0) };
}

2. ??byte[]?? 轉(zhuǎn)基本數(shù)據(jù)類型

2.1 ??byte[]?? 轉(zhuǎn) ??int??

public static int byteArrayToInt(byte[] bytes) {
    return (bytes[0] & 0xFF) << 24 |
           (bytes[1] & 0xFF) << 16 |
           (bytes[2] & 0xFF) << 8  |
           (bytes[3] & 0xFF);
}

2.2 ??byte[]?? 轉(zhuǎn) ??long??

public static long byteArrayToLong(byte[] bytes) {
    return (bytes[0] & 0xFFL) << 56 |
           (bytes[1] & 0xFFL) << 48 |
           (bytes[2] & 0xFFL) << 40 |
           (bytes[3] & 0xFFL) << 32 |
           (bytes[4] & 0xFFL) << 24 |
           (bytes[5] & 0xFFL) << 16 |
           (bytes[6] & 0xFFL) << 8  |
           (bytes[7] & 0xFFL);
}

2.3 ??byte[]?? 轉(zhuǎn) ??float??

public static float byteArrayToFloat(byte[] bytes) {
    return Float.intBitsToFloat(byteArrayToInt(bytes));
}

2.4 ??byte[]?? 轉(zhuǎn) ??double??

public static double byteArrayToDouble(byte[] bytes) {
    return Double.longBitsToDouble(byteArrayToLong(bytes));
}

2.5 ??byte[]?? 轉(zhuǎn) ??char??

public static char byteArrayToChar(byte[] bytes) {
    return (char)(((bytes[0] & 0xFF) << 8) | (bytes[1] & 0xFF));
}

2.6 ??byte[]?? 轉(zhuǎn) ??boolean??

public static boolean byteArrayToBoolean(byte[] bytes) {
    return bytes[0] != 0;
}

3. 使用 ??ByteBuffer?? 進(jìn)行轉(zhuǎn)換

Java的??ByteBuffer??類提供了更方便的方法來(lái)進(jìn)行基本數(shù)據(jù)類型和??byte[]??之間的轉(zhuǎn)換。以下是一些示例:

3.1 ??int?? 轉(zhuǎn) ??byte[]??

import java.nio.ByteBuffer;

public static byte[] intToByteArray(int value) {
    return ByteBuffer.allocate(4).putInt(value).array();
}

3.2 ??byte[]?? 轉(zhuǎn) ??int??

public static int byteArrayToInt(byte[] bytes) {
    return ByteBuffer.wrap(bytes).getInt();
}

3.3 ??double?? 轉(zhuǎn) ??byte[]??

public static byte[] doubleToByteArray(double value) {
    return ByteBuffer.allocate(8).putDouble(value).array();
}

3.4 ??byte[]?? 轉(zhuǎn) ??double??

public static double byteArrayToDouble(byte[] bytes) {
    return ByteBuffer.wrap(bytes).getDouble();
}

4. 注意事項(xiàng)

字節(jié)序:上述示例默認(rèn)使用大端字節(jié)序(Big-Endian)。如果需要小端字節(jié)序(Little-Endian),可以在??ByteBuffer??中調(diào)用??order(ByteOrder.LITTLE_ENDIAN)??方法。

異常處理:在實(shí)際應(yīng)用中,建議添加異常處理,以應(yīng)對(duì)可能的輸入錯(cuò)誤或異常情況。

通過(guò)這些方法,你可以在Java中輕松地進(jìn)行基本數(shù)據(jù)類型和??byte[]??之間的轉(zhuǎn)換。希望這些示例對(duì)你有所幫助!

以上就是Java實(shí)現(xiàn)基本數(shù)據(jù)類型與byte數(shù)組相互轉(zhuǎn)換的詳細(xì)內(nèi)容,更多關(guān)于Java數(shù)據(jù)類型轉(zhuǎn)byte數(shù)組的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • idea如何開(kāi)啟菜單欄

    idea如何開(kāi)啟菜單欄

    文章介紹了如何通過(guò)修改IntelliJ IDEA的樣式文件`ui.lnf.xml`來(lái)重新顯示被關(guān)閉的菜單欄,并分享了解決問(wèn)題的步驟
    2025-01-01
  • Java將RTF文檔轉(zhuǎn)換為Word/PDF/HTML/圖片

    Java將RTF文檔轉(zhuǎn)換為Word/PDF/HTML/圖片

    RTF文檔因其跨平臺(tái)兼容性而廣泛使用,但有時(shí)在不同的應(yīng)用場(chǎng)景可能需要特定的文檔格式,所以本文來(lái)講講如何通過(guò)Java將RTF轉(zhuǎn)換為Word/PDF/HTML和圖片格式
    2025-01-01
  • java實(shí)現(xiàn)飛機(jī)大戰(zhàn)案例詳解

    java實(shí)現(xiàn)飛機(jī)大戰(zhàn)案例詳解

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)飛機(jī)大戰(zhàn)案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Springboot實(shí)現(xiàn)對(duì)配置文件中的明文密碼加密詳解

    Springboot實(shí)現(xiàn)對(duì)配置文件中的明文密碼加密詳解

    我們?cè)赟pringBoot項(xiàng)目當(dāng)中,會(huì)把數(shù)據(jù)庫(kù)的用戶名密碼等配置直接放在yaml或者properties文件中,這樣維護(hù)數(shù)據(jù)庫(kù)的密碼等敏感信息顯然是有一定風(fēng)險(xiǎn)的。所以本文為大家整理了對(duì)配置文件中的明文密碼加密的方法,希望對(duì)大家有所幫助
    2023-03-03
  • Spring的事件監(jiān)聽(tīng)機(jī)制示例詳解

    Spring的事件監(jiān)聽(tīng)機(jī)制示例詳解

    這篇文章主要給大家介紹了關(guān)于Spring的事件監(jiān)聽(tīng)機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Mybatis-Plus如何配置分頁(yè)對(duì)象

    Mybatis-Plus如何配置分頁(yè)對(duì)象

    本文主要介紹了Mybatis-Plus如何配置分頁(yè)對(duì)象,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Spring Boot 編寫Servlet、Filter、Listener、Interceptor的方法

    Spring Boot 編寫Servlet、Filter、Listener、Interceptor的方法

    這篇文章給大家介紹了spring-boot中如何定義過(guò)濾器、監(jiān)聽(tīng)器和攔截器,對(duì)Spring Boot 編寫Servlet、Filter、Listener、Interceptor的相關(guān)知識(shí)感興趣的朋友一起看看吧
    2017-07-07
  • Java BeanUtils工具類常用方法講解

    Java BeanUtils工具類常用方法講解

    這篇文章主要介紹了Java BeanUtils工具類常用方法講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Sentinel熱門詞匯限流的實(shí)現(xiàn)詳解

    Sentinel熱門詞匯限流的實(shí)現(xiàn)詳解

    這篇文章主要介紹了使用Sentinel對(duì)熱門詞匯進(jìn)行限流的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • poi導(dǎo)出word表格的操作講解

    poi導(dǎo)出word表格的操作講解

    這篇文章主要介紹了poi導(dǎo)出word表格的操作講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10

最新評(píng)論

荥阳市| 馆陶县| 柯坪县| 泗阳县| 潞城市| 南京市| 安阳县| 奉节县| 天柱县| 临沧市| 北碚区| 东阿县| 深泽县| 故城县| 昭觉县| 阳高县| 稷山县| 宽城| 西青区| 马公市| 水富县| 毕节市| 富裕县| 屏东市| 修武县| 安图县| 仲巴县| 如皋市| 武定县| 西乌珠穆沁旗| 崇州市| 寿阳县| 崇阳县| 临安市| 仁寿县| 石柱| 阳信县| 玉树县| 防城港市| 平乡县| 丰县|