一、基础原理

带符号的十六进制在计算机中以二进制存储时,第一位为符号位。符号位为1时表示负数,符号位为0时表示正数。

二、实现逻辑

由上面的原理可得,我们将带符号的十六进制数转换为二进制数,然后拿出符号位判断好他是正数还是负数,再将二进制数转为不带符号的十进制数。最后用判断好的正负数变量+无符号十进制数即可得到带符号的十进制数。

1
2
3
4
5
6
7
8
9
10
11
function HexToShort($hexString){
$dc = hexdec($hexString);
$bin1 = $dc>>15;
if($bin1==0){
return hexdec($hexString);
}else{
$ori = $dc&0x7FFF;
$inverse = ~$ori&0x7FFF;
return "-".base_convert(sprintf("%016b",$inverse),2,10);
}
}