1

しばらく寝ていないので、何か簡単なことを見逃しているのかもしれません。基本的には数字を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 はなぜ、どのように魔法のように機能するのでしょうか?

4

2 に答える 2

2

According to the comments in the php docs, chr will take the parameter modulo 256. Even negative integers work. bin2hex doesn't do that operation, and fails on invalid inputs.

于 2012-07-05T22:21:27.407 に答える
2

chr()入力の最下位 8 ビットのみを調べます。

echo "'".chr(320)."'";

収量...

'@'

と同じように...

echo "'".chr(64)."'";

http://ideone.com/65Itz

于 2012-07-05T22:20:24.247 に答える