一起Talk Android吧(第五百一十三回:Java中的byte数组与int变量相互转换)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起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变量相互转换"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第五百一十三回:Java中的byte数组与int变量相互转换)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第四百一十三回:使用三角函数绘制正弦波)

一起Talk Android吧(第五百一十九回:波浪上升动画)

一起Talk Android吧(第五百一十七回:绘制波浪效果)

一起Talk Android吧(第五百一十一回:自定义Dialog主题)

一起Talk Android吧(第五百一十二回:自定义Dialog)

一起Talk Android吧(第五百一十六回:绘制压力扩散图)