我在github: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)基本上,所发生的事情是,两个的补值(N)被转换成浮点数。为什么只有当n的值大于0x7fff时才会发生这种情况?如果值为0x7fff或更小,则只需将i转换为浮动。为什么?我不明白这个。
来自德州仪器的示例代码可以在这里找到:开发
为什么在TI示例代码中此函数中的返回值被128.0除以?
private double extractAmbientTemperature(BluetoothGattCharacteristic c) {
int offset = 2;
return shortUnsignedAtOffset(c, offset) / 128.0;
}我确实向开发人员问过这个问题,但没有得到答复。
发布于 2015-01-29 21:23:17
在磁盘和内存中,整数被存储到一定的位宽.现代Python的int允许我们忽略大部分细节,因为它们可以神奇地扩展到任何需要的大小,但有时当我们从磁盘或其他系统获得值时,我们必须考虑它们是如何实际存储的。
16位有符号整数的正值将存储在0x0001-0x7fff范围内,其负值将存储在0x8000-0xffff中。如果这个值是以某种方式读取的,而没有检查符号位(可能是一个无符号整数,或者是一个较长的整数的一部分,或者是从两个字节组装的),那么我们需要恢复这个符号。
多么?如果值在0x7fff上,我们知道它应该是负值,负值存储为二补。因此,我们简单地从它减去0x10000,得到负值。
https://stackoverflow.com/questions/28224223
复制相似问题