Java 字节操作 - 将 3 字节转换为整数数据

标签 java int hex arrays

我有一些字节整型操作。但我无法找出问题所在。

首先,我有一个十六进制数据,并将其作为整数保存

public static final int hexData = 0xDFC10A;

我用这个函数将它转换为字节数组:

public static byte[] hexToByteArray(int hexNum)
    {
        ArrayList<Byte> byteBuffer = new ArrayList<>();

        while (true)
        {
            byteBuffer.add(0, (byte) (hexNum % 256));
            hexNum = hexNum / 256;
            if (hexNum == 0) break;
        }

        byte[] data = new byte[byteBuffer.size()];
        for (int i=0;i<byteBuffer.size();i++){
            data[i] = byteBuffer.get(i).byteValue();
        }


        return data;
    }

我想再次将 3 字节数组转换回整数,我该怎么做? 或者您也可以建议其他转换函数,例如 hex-to-3-bytes-array 和 3-bytes-to-int,再次感谢您。

更新

在c#中有人使用下面的函数但在java中不起作用

 public static int byte3ToInt(byte[] byte3){
        int res = 0;
        for (int i = 0; i < 3; i++)
        {
            res += res * 0xFF + byte3[i];
            if (byte3[i] < 0x7F)
            {
                break;
            }
        }
        return res;
    }

最佳答案

这将为您提供值(value):

(byte3[0] & 0xff) << 16 | (byte3[1] & 0xff) << 8 | (byte3[2] & 0xff)

假设字节数组的长度为 3 个字节。如果您还需要转换较短的数组,可以使用循环。

另一个方向的转换(int 到 bytes)可以用这样的逻辑运算来编写:

byte3[0] = (byte)(hexData >> 16);
byte3[1] = (byte)(hexData >> 8);
byte3[2] = (byte)(hexData);

关于Java 字节操作 - 将 3 字节转换为整数数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33095152/

相关文章:

java - Java如何比较集合?

mysql - mysql 中 int(11) 列的大小(以字节为单位)?

go - golang 中十六进制的大数字

flutter - 将任意长的十六进制字符串转换为 Dart 中的数字?

hex - 如何在 UltraEdit 中在十六进制和普通 View (ASCII) 之间切换?

java - 在java中比较两个日期的最佳方法

java - 如何使用Java播放wav文件?

java - 可能很简单,jet我无法让它工作(媒体播放器)

Java:自定义方法参数问题

java - 为什么不能将两个字节加一个整数并可以将两个最后字节加一个字节?