PHP解析ELA温度传感器原始数据

PHP解析ELA温度传感器原始数据,php,parsing,temperature,raw-data,Php,Parsing,Temperature,Raw Data,我已经成功地从下面的原始数据转换了正温度数据 array ( 'timestamp' => '2020-06-11T11:09:21.335Z', 'type' => 'Unknown', 'mac' => 'F64BB46181EF', 'bleName' => 'P RHT 900350', 'rssi' => -63, 'rawData' => '02010605166E2AC90A04166F2A240D095020524854203930303335

我已经成功地从下面的原始数据转换了正温度数据

array (
'timestamp' => '2020-06-11T11:09:21.335Z',
'type' => 'Unknown',
'mac' => 'F64BB46181EF',
'bleName' => 'P RHT 900350',
'rssi' => -63,
'rawData' => '02010605166E2AC90A04166F2A240D09502052485420393030333530',
)

但是当我得到负的温度值时,它会使温度值增加600以上

这是负温度原始数据

array (
'timestamp' => '2020-07-03T10:05:53.049Z',
'type' => 'Unknown',
'mac' => 'EDF2F589DCAE',
'bleName' => 'P RHT 900351',
'rssi' => -79,
'rawData' => '02010605166E2AB4FA04166F2A310D09502052485420393030333531',
)

我已经询问了他们所说的支持团队

你必须做一个2的补码,将所有的位颠倒过来,然后在二进制中加1。


我假设输出正常,但对于32位数字,此代码检查高位是否已设置(使用
&32768
),如果已设置,则将该数字与65535(所有16位已设置)进行异或,将其反转,然后仅添加1(结果将成为-ve数字)

其结果为-13.56

array (
'timestamp' => '2020-07-03T10:05:53.049Z',
'type' => 'Unknown',
'mac' => 'EDF2F589DCAE',
'bleName' => 'P RHT 900351',
'rssi' => -79,
'rawData' => '02010605166E2AB4FA04166F2A310D09502052485420393030333531',
if ( $c_cut & 32768  )  {
    $c_cut = -(($c_cut ^ 65535)+1);
}