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

PHP Parsing ELA Temperature Sensor raw data

我已成功将以下原始数据转换为正温度数据

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

)

$cutdata = str_split($rawData,2);
$humidity_cut = hexdec($cutdata[13]);
$x_cut = $cutdata[8].$cutdata[7]; //gives 0AC9
$c_cut = hexdec($x_cut);
$temp_cut = $c_cut/100;
echo $temp_cut;exit;

但是当我得到负温度值时,它给我带来了问题,它会增加温度值超过 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 数)...

if ( $c_cut & 32768  )  {
    $c_cut = -(($c_cut ^ 65535)+1);
}

结果为 -13.56。