Как я могу преобразовать 3 значения типа int в одно значение типа int, а затем восстановить - PullRequest
0 голосов
/ 15 октября 2018

Как я могу преобразовать 3 значения типа int в одно значение типа int, тогда я могу восстановить 3 значения типа int с помощью одного значения типа int.например,

$n1 = 8559800019119; 
$n2 = 99901;
$n3 = 911861;
$result = ????????($n1, $n2, $n3);  //how can I convert $n1, $n2, $n3 to $result

и я восстановлю там 3 значения типа int.

????????($result);

$r1 == $n1 == 8559800019119;
$r2 == $n2 == 99901;
$r3 == $n3 == 911861;

Пожалуйста, НЕ используйте STRING или ARRAY (например, explode('|', "{$n1}|{$n2}|{$n3}")), только арифметическая операция.

1 Ответ

0 голосов
/ 15 октября 2018

В общем случае не существует решения для вашей задачи.

Памяти одного целого числа просто недостаточно для хранения информации о нескольких целых числах.

Кстати: номер вашего примера 8559800019119 не уместится в 32 бита.Так что это будет работать только на 64-битных платформах.В 32-разрядном типе данных является число с плавающей запятой двойной точности, а не целое число.


Однако при определенных обстоятельствах может возникнуть обходной путь.

Случай № 1 - область ограниченных значений

Если область значений целых чисел ограничена использованием только меньшего количества битов, чем собственные целые числа php, то вы можете упаковать их с помощью операторов сдвига.Например:

assert($n1 >= 0 && $n1 <= 255);
assert($n2 >= 0 && $n2 <= 1023);
assert($n3 >= 0 && $n3 <= 16383);

# pack
$packed = $n1 | ($n2<<8) | $n3<<18;

# unpack
$r1 = $packed & 255;
$r2 = ($packed >> 8) & 1023;
$r3 = ($packed >> 18) & 16383;

Случай № 2 - независимое хранилище

Если у вас есть возможность сохранять свои значения где-то еще, используя уникальный целочисленный (авто) идентификатор в качестве ключа - например, в база данных или файл с именем, содержащим ключ - вы можете передать идентификатор ключа вместо фактических значений и позже прочитать исходные значения, используя уникальный ключ, переданный как одно целое число.

Недостаток подобных решений заключается в том, что вам обычно требуется какая-то очистка, чтобы избавиться от старых потерянных значений.Кроме того, вам нужна логика для создания уникальных идентификаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...