У меня есть этот JS-код для преобразования входных байтов в температуру.Я пытаюсь повторить это в Python.Основное отличие заключается в том, что в JS я имел дело с Uint8Array.Теперь я вручную сохранил байты с помощью приложения LightBlue для iOS.И мне нужно преобразовать текст в байты в температуру.
JS:
var bufferA = new Uint8Array(dataIncoming);
var a = ((bufferA[3]) | (bufferA[4]) << 8);
var b = ((bufferA[5]) | (bufferA[6]) << 8);
var currentTempC = ((1.0 * a) + (1.0 * b))/100.0;
var currentTempF = currentTempC * 9 / 5 + 32;
Python: Закомментированное число (175F-168F) - это фактическая температура.
bytesRaw = [
'060203671B0000', #175F
'060203991D0000', #172F
'0602031A1E0000', #171F
'060203381E0000', #169F
'060203341E0000', #168F
]
for i in range(0, len(bytesRaw)):
#Trim and convert ascii to hex
a = binascii.a2b_hex( bytesRaw[i][6:-6] )
b = binascii.a2b_hex( bytesRaw[i][8:-4] )
print(a,b)
#Convert to int?
a = int.from_bytes( a, byteorder='little')
b = int.from_bytes( b, byteorder='little')
print(a,b)
currentTempC = ((1.0 * a) + (1.0 * b))/100.0;
currentTempF = currentTempC * 9.0 / 5.0 + 32.0;
print('{0:4.3f}C'.format(currentTempC))
print('{0:4.3f}F'.format(currentTempF))
Результаты:
b'g' b'\x1b'
103 27
1.300C
34.340F
b'\x99' b'\x1d'
153 29
1.820C
35.276F
b'\x1a' b'\x1e'
26 30
0.560C
33.008F
b'8' b'\x1e'
56 30
0.860C
33.548F