天天看点

一起Talk Android吧(第五百一十三回:Java中的byte数组与int变量相互转换)整体思路示例代码

文章目录

  • 整体思路
  • 示例代码

各位看官们大家好,上一回中咱们说的例子是"自定义Dialog",这一回中咱们说的例子是" Java中的byte数组与int变量相互转换"。闲话休提,言归正转, 让我们一起Talk Android吧!

在实际项目中与BLE设备通信时需要使用byte数组,而程序中使用数据是int类型。因此需要在它们之间相互数据类型转换。我们将编写一个转换工具类,方便在项目中

使用。本章回中将介绍转换类的实现方法。

整体思路

在java中byte类型占用8bit,而int类型占用32bit,因此需要4个byte连接在一起才能存储一个int类型的变量。我们通常使用长度为4的byte数组来存放数据。也可以使用一个byte存储int类型的变量,只是它的存储范围在-128-127之间,不在这个范围的数字会产生精度丢失进而导致数据不准确。

在转换过程中还有一个细节需要处理:字节的高低位顺序,大部分机器的数据存储是高位在前,低位在后,有些机器的数据存储正好与此相反。因此在转换过程中也需要考虑这点。

示例代码

下面是示例程序,请大家参考:

/**
     * Desc:int变量转换成byte数组,前提是int是32位,占用4个byte,这里的Big表示转换后高位在前,低位在后
     */
    public static byte[] intToByteArrayBig(int value) {
        byte[] result = new byte[4];

        result[0] = (byte) ((value >> 24) & 0XFF);
        result[1] = (byte) ((value >> 16) & 0XFF);
        result[2] = (byte) ((value >> 8) & 0XFF);
        result[3] = (byte) ((value) & 0XFF);

        return result;
    }

    /**
     * Desc:int变量转换成byte数组,前提是int是32位,占用4个byte, 这里的Small表示转换后低位在前,高位在后
     */
    public static byte[] intToByteArraySmall(int value) {
        byte[] result = new byte[4];

        result[3] = (byte) ((value >> 24) & 0XFF);
        result[2] = (byte) ((value >> 16) & 0XFF);
        result[1] = (byte) ((value >> 8) & 0XFF);
        result[0] = (byte) ((value) & 0XFF);

        return result;
    }

    /**
     * Desc:int变量转换成byte数组,前提是int是32位,占用4个byte, 这里的Big表示转换后高位在前,低位在后
     */
    public static int byteArrayToIntBig(byte array[]) {
        if (array == null || array.length == 0)
            return 0;

        int result = 0;
        result = (int) array[0];
        result = (int) (result >> 8 | array[1]);
        result = (int) (result >> 16 | array[2]);
        result = (int) (result >> 24 | array[3]);

        return result;
    }


    /**
     * Desc:int变量转换成byte数组,前提是int是32位,占用4个byte,这里的Small表示转换后低位在前,高位在后
     * Params:
     * Date: 2023/3/2
     */
    public static int byteArrayToIntSmall(byte array[]) {
        if (array == null || array.length == 0)
            return 0;
        int result = 0;
        result = (int) array[3];
        result = (int) (result >> 8 | array[2]);
        result = (int) (result >> 16 | array[1]);
        result = (int) (result >> 24 | array[0]);

        return result;
    }
           

我建议把上面的程序写到一个类中,以后需要使用时直接使用类中的方法就可以。

看官们,关于"Java中的byte数组与int变量相互转换"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!