1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| 思路: 循环/16,余数放到末尾,输入0返回0,输入负数先算补码,用补码计算
代码: /** * @param Integer $num * * @return String */ function toHex($num) { if ($num < 0) { // 对于小于0的数,使用补码,位运算取反+1 $num = -$num ^ 0xffffffff; $num++; }
if ($num === 0) { return '0'; }
$str = ''; while ($num) { $mod = $num % 16;
if ($mod > 9) { // 大于9的数,+87对应到ASCII的字符 $str = chr($num % 16 + 87) . $str; } else { $str = $num % 16 . $str; } $num = intdiv($num, 16); }
return $str; }
|