Я нашел пример кода для извлечения температуры из тега датчика Texas Instruments на github: https://github.com/msaunby/ble-sensor-pi/blob/master/sensortag/sensor_calcs.py
Я не понимаю, что делает следующий код:
tosigned = lambda n: float(n-0x10000) if n>0x7fff else float(n)
Как я прочитал приведенный выше фрагмент кода:
if n>0x7fff: n = float(n-0x10000)
else n = float(n)
В основном происходит то, что значение дополнения two (n) преобразуется в число с плавающей запятой. Почему это должно происходить только тогда, когда значение n больше 0x7fff? Если значение равно 0x7fff или меньше, мы просто конвертируем i в число с плавающей запятой. Почему? Я этого не понимаю.
Пример кода от Texas Instruments можно найти здесь: http://processors.wiki.ti.com/index.php/SensorTag_User_Guide#SensorTag_Android_Development
Почему возвращаемое значение делится на 128,0 в этой функции в примере кода TI?
private double extractAmbientTemperature(BluetoothGattCharacteristic c) {
int offset = 2;
return shortUnsignedAtOffset(c, offset) / 128.0;
}
Я задавал этот вопрос разработчику, но ответа не получил.
float(0x8fff)
иfloat(0x8fff-0x10000)
? Подсказка в имениtosigned
! - person jonrsharpe   schedule 29.01.2015