我在2'实现中加载了14位带符号二进制(密封在16位),通过BLE(蓝牙低功耗)从传感器收集这些数据。我想将其转换为十进制。
我在 JAVA 中找到了一个代码段,它可以按正确的顺序解析14位二进制文件。但我是编码python的新手。你能解释一下c [offset + 1]和c [offset]& 0xFF的?以及它如何在python中表达?
private static Integer shortSignedAtOffset(byte[] c, int offset) {
Integer lowerByte = (int) c[offset] & 0xFF;
Integer upperByte = (int) c[offset+1]; // // Interpret MSB as signed
return (upperByte << 8) + lowerByte;
}
例如: a = 0010 1000 0000 0000 如果我说+ 1等于c [offset + 1],那是正确的吗?什么是二进制的偏移,特别是与传感器有关? 非常感谢 请回答我。真的需要帮助。
答案 0 :(得分:0)
您的理解是错误的,offset
是一个数组索引。
说a=0x2A01
,这就是a
存储在内存中的方式:
a = 0010 1000 0000 0001
如果我们将a
视为字节数组(byte []
),则以c
表示:
c[0] = 0x2
c[1] = 0xA
c[2] = 0x0
c[3] = 0x1
然后你可以单独操作字节,然后将它们打包回整数 整数到字节数组的转换(反之亦然)因语言而异 如果您遇到问题,请发布不同的问题。
答案 1 :(得分:0)
从设备解码十六进制到十进制的2&#39;补码数。在编写代码之前必须考虑3步。
以下代码表示十六进制字符串到十进制
def twocompbinstr(valstr, bits):
if type(valstr) is str:
valstr = int(valstr, 16) #expect hex in string format
if (valstr & (1 << (bits - 1))) != 0:
valstr = valstr - (1 << bits)
return valstr
测试代码:
h = '3aff' # 0011 1010 1111 1111
# 14bits 2'complement integer is sealed in 16bit format.
e = twocompbinstr(h,14)
print e, type(e)
output:
-1281 <type 'int'>