有一段时间没睡了,所以我可能错过了一些简单的东西。基本上,我接受一个数字并将其转换为三个字符。最大可能数为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如此神奇?
发布于 2012-07-06 06:20:24
chr()只查看其输入的最低8位:
echo "'".chr(320)."'";收益率...
'@'就像……
echo "'".chr(64)."'";http://ideone.com/65Itz
发布于 2012-07-06 06:21:27
根据php docs中的注释,chr将采用模256参数。即使是负整数也可以。bin2hex不会执行该操作,并且会在无效输入时失败。
https://stackoverflow.com/questions/11353241
复制相似问题