如何将3个int值转换为单个int值然后还原

时间:2018-10-15 13:57:23

标签: php int

如何将3个int值转换为单个int值,然后可以通过单个int值在那里还原3个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 :(得分:0)

通常没有解决方案

仅存储一个整数不足以容纳多个整数的信息。

顺便说一句:您的示例编号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-独立存储

如果您可以选择使用唯一的整数(auto-)ID作为键将值存储在其他位置,例如在名称包含密钥的数据库文件中-您可以传递密钥ID而不是实际值,并稍后使用传递的唯一密钥读取原始值作为单个整数。

这样的解决方案的缺点是您通常需要某种清理来摆脱旧的孤立值元组。此外,您需要一些逻辑来创建唯一的ID。