我正在使用IP2Location数据库来查找IPv6地址的国家代码。他们有一个method将IPv6地址转换为可用于查询其数据库的(大)号码。将数字还原为IPv6字符串表示形式
$ipv6 = '2404:6800:4001:805::1006';
$int = inet_pton($ipv6);
$bits = 15;
$ipv6long = 0;
while($bits >= 0){
$bin = sprintf("%08b", (ord($int[$bits])));
if($ipv6long){
$ipv6long = $bin . $ipv6long;
}
else{
$ipv6long = $bin;
}
$bits--;
}
$ipv6long = gmp_strval(gmp_init($ipv6long, 2), 10);
在这种情况下,$ipv6long
将47875086426098177934326549022813196294.
现在我想知道这样的数量是否可以恢复到地址的IPv6字符串表示。如果是这样,怎么样?
这是一个普通的整数,你的'2404 ...'版本是十六进制的。所以基本上这只是“如何将整数转换为十六进制表示”。只要记住'::'代表一个全零的序列,另一个':'只是用于16位块的可视分离。 –
@MarcB谢谢,这让我走上正轨。准备好后会发布我的代码。 – RonaldPK