我正在尝试将 Beuerer BF480 设备与java程序集成。我找到了python代码,它以所需的格式通过串行USB接口转换接收的数据。下面是在python中完成工作的代码片段:
frmt = "!" + "H"*64
x = struct.unpack(frmt, byte_array)
有人可以帮助我理解这两行代码吗?如果有人知道java相当于此,那就很高兴知道。
答案 0 :(得分:0)
我不想回答我自己的问题。
但是,正如我现在所说的那样,我想分享这个问题的解决方案。基本上python代码试图将字节数组转换为十六进制值。表达式"!" + "H"*64
告诉它BIG_ENDIAN
表达式(从左边开始读取字节数组)并将字节数组转换为64个十六进制值。
我没有找到java中的等效代码来完成这项工作,但是在努力解码字节数组后,我能够使用下面的代码获得预期的结果。
public static int[] unpack(final byte[] byte_array) {
final int[] integerReadings = new int[byte_array.length / 2];
for(int counter = 0, integerCounter = 0; counter < byte_array.length;) {
integerReadings[integerCounter] = convertTwoBytesToInteger(byte_array[counter], byte_array[counter + 1]);
counter += 2;
integerCounter++;
}
return integerReadings;
}
private static int convertTwoBytesToInteger(final byte byte1, final byte byte2) {
final int unsignedInteger1 = getUnsignedInteger(byte1);
final int unsignedInteger2 = getUnsignedInteger(byte2);
return unsignedInteger1 * 256 + unsignedInteger2;
}
private static int getUnsignedInteger(final byte b) {
int unsignedInteger = b;
if(b < 0) {
unsignedInteger = b + 256;
}
return unsignedInteger;
}
此代码是关于数据流的字节级操作。但是,它解决了我现在的问题,我得到了预期的结果。如果有一个更好的解决方案,我肯定希望实现相同的。