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

Java字节操作-将3字节转换为整数数据,java,int,hex,bytearray,Java,Int,Hex,Bytearray,我有一些字节int运算。但是我想不出问题所在 首先,我有一个十六进制数据,我把它作为一个整数保存 public static final int hexData = 0xDFC10A; 我用这个函数把它转换成字节数组: public static byte[] hexToByteArray(int hexNum) { ArrayList<Byte> byteBuffer = new ArrayList<>(); while (t

我有一些字节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;
    }
公共静态字节[]hextobyterarray(int hexNum)
{
ArrayList byteBuffer=新的ArrayList();
while(true)
{
add(0,(字节)(hexNum%256));
hexNum=hexNum/256;
如果(hexNum==0)中断;
}
字节[]数据=新字节[byteBuffer.size()];

对于(int i=0;i将整数转换为十六进制:
Integer.toHexString()


要将hexString转换为整数:
Integer.parseInt(“FF”,16);
您可以使用Java NIO的ByteBuffer:

byte[] bytes = ByteBuffer.allocate(4).putInt(hexNum).array();
反过来也是可能的。看一看

例如:

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代码类似的操作:

公共静态int字节3点(最终字节[]字节3){
int res=0;
对于(int i=0;i<3;i++)
{
res*=256;
if(字节3[i]<0)
{
res+=256+字节3[i];//有符号到无符号转换
}否则
{
res+=字节3[i];
}
}
返回res;
}

这将为您提供以下值:

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

他想要的是字节[]而不是字符串。@Burkhard sting.getBytes()。或者,查看方法的内部实现总是有用的。这应该是最理想的。你是对的,我同意你的看法,但有时你必须这样做:P需要3字节而不是43字节不足以容纳int,你对额外的字节怎么办?此外,我可以将其更改为3字节,我需要更改返回int,我将只使用那种数据0xDA10AB、0xDFC10A..等等..@mismnc。如果您计划将来使用byte3point,您可能需要添加一些测试。类似于检查它是否真的是一个3字节数组。英语可能不是您的母语。请不要说“我希望您帮助我”除非你是认真的。这听起来很粗鲁和傲慢。下次你就知道了!谢谢你的纠正,我不是认真的。我将尝试不再使用@niklasrf。对于上面的示例,我已经尝试过,对于14663946 int值,返回704991对,
hexToByteArray
方法以相反的顺序返回字节;请参见编辑。我可以问你一些问题吗ething,你能回顾一下我的第一个函数吗?你能像这样优化吗?再次感谢你!!
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;
    }
(byte3[0] & 0xff) << 16 | (byte3[1] & 0xff) << 8 | (byte3[2] & 0xff)
byte3[0] = (byte)(hexData >> 16);
byte3[1] = (byte)(hexData >> 8);
byte3[2] = (byte)(hexData);