Java将4个字节转换为单个变量

时间:2013-09-06 17:11:56

标签: java arrays byte

我要做的是将当前在数组中的4个字节放入单个字节变量中。例如:

public myMethod()
{
   byte[] data = {(byte) 0x03, (byte) 0x4C, (byte) 0xD6, (byte) 0x00 };
   writeData(testMethod((byte)0x4C, data));
}

public byte[] testMethod(byte location, byte[] data)
{
    byte[] response = {(byte) 0x00, (byte) 0x21, location, data);
    return response;
}

这显然不起作用,因为你不能将字节转换为byte []。

有什么想法吗?

编辑: 对于我的要求,存在一些混乱。我正在寻找的是

data = (byte) 0x034CD600;

在“testMethod”中。

2 个答案:

答案 0 :(得分:2)

你可以尝试类似的东西:

private static final byte[] HEADER = new byte[] { (byte) 0x00, (byte) 0x21 };

public static byte[] testMethod(byte location, byte[] data) {
    byte[] response = Arrays.copyOf(HEADER, HEADER.length + data.length + 1);
    response[HEADER.length] = location;
    System.arraycopy(data, 0, response, HEADER.length + 1, data.length);
    return response;
}

或者如果您使用ByteBuffer s

public static ByteBuffer testMethodBB(ByteBuffer bb, byte location, byte[] data) {
    if(bb.remaining() < HEADER.length + 1 + data.length) {
        bb.put(HEADER);
        bb.put(location);
        bb.put(data);
        bb.flip();
        return bb;
    }
    throw new IllegalStateException("Buffer overflow!");
}

答案 1 :(得分:0)

只需创建一个足够大的byte[]来存储来自data的元素。

public byte[] testMethod(byte location, byte[] data)
{
    byte[] response = new byte[3 + data.length];
    response[0] = (byte) 0x00;
    response[1] = (byte) 0x21;
    response[2] = location;
    for (int i = 0; i < data.length; i++) {
        response[3 + i] = data[i];
    }
    return response;
}

如果速度很重要,请使用System.arraycopy()。我发现上面的内容更容易理解。

符号

byte[] response = {(byte) 0x00, (byte) 0x21, location, date);
正如你所说,

是非法的。 {...}初始值设定项只接受byte类型的变量或文字。