PHP 16进制负数转10进制,如何实现

在PHP中,将16进制负数转换回10进制时,原始问题提到使用`dechex(-101 & 0xff)`得到9b,但这个方法无法正确还原负数。由于负数的二进制表示在转换为16进制时会丢失高位信息,因此直接转换会导致错误结果。解答者指出,对于-101这样的负数,简单的位操作无法完成转换,需要更完整的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0

例如
$a=-101;

通过PHP内置函数可将$a转为16进制
echo dechex(-101 & 0xff);
-----------
输出结果:9b

求大神讲解,php如何将9b,这样的负16进制数,转回10进制的-101

2个回答

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值