我已经成功地从原始数据下面转换了正温度数据
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多个
这是负的Temp Raw数据
array (
'timestamp' => '2020-07-03T10:05:53.049Z',
'type' => 'Unknown',
'mac' => 'EDF2F589DCAE',
'bleName' => 'P RHT 900351',
'rssi' => -79,
'rawData' => '02010605166E2AB4FA04166F2A310D09502052485420393030333531',
)
我已经问过他们所说的支持团队
您必须进行2的补码, 将所有位取反,然后在二进制数中加1。
答案 0 :(得分:1)
我假设输出正常,但是对于32位数字,此代码检查是否设置了高位(使用& 32768
),如果是,则将其与65535进行异或(所有设置16位)将其取反,然后再加1(然后将结果设为-ve数字)...
if ( $c_cut & 32768 ) {
$c_cut = -(($c_cut ^ 65535)+1);
}
其结果为-13.56。