2
已采纳
-101 用 decbin 显示有32位。 & 0xff 只取了最低8位,高位都被截去了, 不能还原吧。
就 -101 而言,可以这么做
$signed = unpack("l", pack("l", hexdec("ffffff9b")));
var_dump(reset($signed));
//解析温度值 例-800
$temp = str_split(dechex(-800 &0xffff),2);
echo $temp[0];
echo $temp[1];
//下面代码中,温度为负数时,hexdec('ffff'.$Temperature),其他hexdec($Temperature)
$Temperature=hexdec($buffer[13]);
$zero=substr(decbin($Temperature),0,1);
if ($zero==1){
$Temperature=$buffer[13].$buffer[14];
$Temperature=unpack("l",pack("l",hexdec('ffff'.$Temperature)));
$Temperature=reset($Temperature);
} else {
$Temperature=$buffer[13].$buffer[14];
$Temperature=unpack("l",pack("l",hexdec($Temperature)));
$Temperature=reset($Temperature);
}
echo $temperature;