しばらく寝ていないので、何か簡単なことを見逃しているのかもしれません。基本的には数字を3文字に変換しています。可能性の最大数は 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;
}
奇妙なことに、これは実際に機能します。それは私が望むことをしますが、どうすればできますか? 3 文字に変換する最初のコードでは、変換の 2 番目の部分は次のようになります。
chr($num / 256)
数値が 65536 より大きい場合、エラーが発生するはずですが、そうではありません。bin2hex の代わりに unpack を使用すると、エラーが発生します。bin2hex はしません。bin2hex はなぜ、どのように魔法のように機能するのでしょうか?