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

时间:2015-10-13 05:57:36

标签: java int hex bytearray

我有一些byte-int操作。但我无法弄清楚问题。

首先,我有一个十六进制数据,我把它作为一个整数

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;
    }

3 个答案:

答案 0 :(得分:2)

这将为您提供值:

(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);

答案 1 :(得分:1)

您可以使用Java NIO的ByteBuffer:

byte[] bytes = ByteBuffer.allocate(4).putInt(hexNum).array();

反之亦然。看看this

举个例子:

final byte[] array = new byte[] { 0x00, (byte) 0xdf, (byte) 0xc1, 0x0a };//you need 4 bytes to get an integer (padding with a 0 byte)
final int x = ByteBuffer.wrap(array).getInt();
// x contains the int 0x00dfc10a

如果你想这样做与C#代码类似:

public static int byte3ToInt(final byte[] byte3) {
        int res = 0;
        for (int i = 0; i < 3; i++)
        {
        res *= 256;
        if (byte3[i] < 0)
        {
            res += 256 + byte3[i]; //signed to unsigned conversion
        } else
        {
            res += byte3[i];
        }
        }
        return res;
    }

答案 2 :(得分:-1)

将整数转换为十六进制:integer.toHexString()

将hexString转换为Integer:Integer.parseInt("FF", 16);