我正在分析一个字节数组,它包含不同类型的变量我要把这个阵列从HID连接到我的手机上。数组是由C程序员制作的。我试图用ByteBuffer类解析它:

byte[] buffer = new byte[64];
if(connection.bulkTransfer(endpoint, buffer, 64, 1000) >= 0)
{
    ByteBuffer byteBuffer = ByteBuffer.wrap(buffer);
    char mId = byteBuffer.getChar();
    short rId = byteBuffer.getShort();
    // ............................
}

但是这个变量的值是不正确的有人能告诉我我做错了什么吗?

最佳答案

如果字节顺序(小字节与大字节)是问题所在,您可以将ByteBuffer的字节顺序设置为本机,而不必更改所有程序:

ByteBuffer byteBuffer = ByteBuffer.wrap(buffer);
byteBuffer.order(ByteOrder.nativeOrder()); // Set native byte order
char mId = byteBuffer.getChar();
short rId = byteBuffer.getShort();

另一方面,如果您发现ByteBuffer对象比字节数组更方便,请告诉C程序员返回一个direct byte buffer而不是一个数组:对各方都更容易,而且可能更高效。

关于java - 将C字节数组解析为Java ByteBuffer。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18151620/

10-12 14:50