- chr: documentation ( source)
- base64_decode: documentation ( source)
- str_replace: documentation ( source)
- base64_encode: documentation ( source)
- ord: documentation ( source)
<?php
function pack_encode($val) {
$str = '';
while ($val > 0) {
$str .= chr($val & 0xFF);
$val = $val >> 8;
}
// "/" json-encodes poorly and "=" is padding
return str_replace(
array('/', '='),
array('_', ''),
base64_encode($str)
);
}
function pack_decode($bin) {
$str = base64_decode(str_replace('_', '/', $bin));
$val = 0;
for ($i=0; $i<strlen($str); $i++) {
$val |= (ord($str[$i]) << ($i * 8));
}
return $val;
}
for ($i=0; $i<32; $i++) {
$val = 1<<$i;
$enc = pack_encode($val);
$dec = pack_decode($enc);
echo "$val => $enc => $dec\n";
}
for ($i=1; $i< 1<<32; $i = $i<<1) {
$enc = pack_encode($val);
$dec = pack_decode($val);
echo "$enc $dec $val\n";
}