有一段时间没睡了,所以我可能错过了一些简单的东西。基本上,我正在取一个数字并将其转换为三个字符。最大可能性数为 256*256*256 (16777216)。我将其转换为:
public function s_encode($num) {
$num = chr($num / 65536).chr($num / 256).chr($num % 256);
return bin2hex($num);
}
并将其转换回:
public function s_decode($hex) {
$a = pack("H*", $hex);
$b = ord(substr($a, 1, 1));
$c = ord(substr($a, 2, 1));
$d = ord(substr($a, 0, 1));
return (($d * 65536) + ($b * 256)) + $c;
}
奇怪的是,这真的有效吗?它做我想做的事,但怎么可能呢?在第一个代码中,我将其转换为三个字符,转换的第二部分是:
chr($num / 256)
如果数字大于 65536,这应该会导致错误,但不会。如果我使用 unpack 而不是 bin2hex,则会导致错误。bin2hex 不会。为什么以及如何 bin2hex 如此神奇?