我要做的是将当前在数组中的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”中。
答案 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
类型的变量或文字。