<?php
function pack_encode($format, $val) {
$b64 = base64_encode(pack($format, $val));
return str_replace(array('/', '='), array('_', ''), $b64); // "/" json-encodes poorly and "=" is padding
}
function pack_decode($format, $val) {
$b64 = str_replace('_', '/', $val); // un-padded
$bytes = unpack($format, base64_decode($b64, false));
return print_r($bytes, false);
//return "foo";
// return $hi << 8 | $lo;
}
function pack_encode_uint16($val) {
return pack_encode('n', $val);
}
function pack_encode_uint32($val) {
return pack_encode('N', $val);
}
function pack_decode_uint16($val) {
return pack_decode('n', $val);
}
function pack_decode_uint32($val) {
return pack_decode('N', $val);
}
$max = 32767;
$n = 20;
$step = intval($max/$n);
for ($i=0; $i<=$n; $i++) {
$val = $i*$step;
$enc16 = pack_encode_uint16($val);
$enc32 = pack_encode_uint32($val);
$str = base64_encode(strval($val)); // STUPID
echo "$enc16 $enc32 $str $val";
$dec16 = pack_decode_uint16($enc16);
$dec32 = pack_decode_uint32($enc32);
if ($dec16 != $val) {
echo " $dec16 != $val";
} else if ($dec32 != $val) {
echo " $dec32 != $val";
}
echo "\n";
}
preferences:
42.36 ms | 402 KiB | 5 Q