Вы можете написать что-то вроде pack()
, которое работает с большими числами, используя bc. Вот мое быстрое решение, оно преобразует ваше второе число в строку из 13 символов. Довольно мило!
<?php
$i2 = "201103231043330478311223582826";
function pack_large($i) {
$ret = '';
while(bccomp($i, 0) !== 0) {
$mod = bcmod($i, 256);
$i = bcsub($i, $mod);
$ret .= chr($mod);
$i = bcdiv($i, 256);
}
return $ret;
}
function unpack_large($s) {
$ret = '0';
$len = strlen($s);
for($i = $len - 1; $i >= 0; --$i) {
$add = ord($s[$i]);
$ret = bcmul($ret, 256);
$ret = bcadd($ret, $add);
}
return $ret;
}
var_dump($i2);
var_dump($pack = pack_large($i2));
var_dump(unpack_large($pack));
Пример вывода:
string(30) "201103231043330478311223582826"
string(13) "jàÙl¹9±̉"
string(47) "201103231043330478311223582826.0000000000000000"
Поскольку вам нужны URL-ориентированные символы, используйте base64_encode
в упакованной строке, это даст вам строку из 20 символов (18, если вы удалите отступ).