2

我要做的是将当前位于数组中的 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;
}

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

有任何想法吗?

编辑:我在问什么有些困惑。我正在寻找的是

data = (byte) 0x034CD600;

在“测试方法”中。

4

2 回答 2

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

或者如果你使用ByteBuffers

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!");
}
于 2013-09-06T17:29:53.227 回答
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

于 2013-09-06T17:16:56.107 回答