网上下载的IP地址数据库中的IP地址并非是我们常见的格式(61.175.232.30),而是这种(1034938398)类型的数据,看起来这两个数据好像没有关连,很复杂,其实并不复杂
<script>ec(2);</script>
,以“61.175.232.30”这个IP地址为例,IP地址转换成数字串方法如下:先将“61.175.232.30”转换为十六进制“3d.af.e8.1e”,然后去掉小数点后,变为“3dafe81e”,最后将这个十六进制数转换为十进制“1034938398”,那么“61.175.232.30”就变为“1034938398”了。
方法一:
代码如下 |
复制代码 |
public function ipToLong(){
$ip = $_SERVER['REMOTE_ADDR'];
$ip = explode('.', $ip);
$ip = array_reverse($ip);//数组反转
$r = 0;
for($i=0,$j=count($ip); $i
$r += $ip[$i] * pow(256, $i);
}
$r = sprintf("%u", $r);
echo $r;
}
|
方法二:
代码如下 |
复制代码 |
public function ipToLong(){
$ip = $_SERVER['REMOTE_ADDR'];
$ip = explode('.',$ip);
$r = ($ip[0]
if($r
echo $r ;
}
|
经测试本地的ip是:192.168.1.101,两个方法转换结果是3232235877
ping 192.168.1.101 和 ping 3232235877是一样的。
下面提供用C#实现IP地址转换的代码:
代码
代码如下 |
复制代码 |
//IP地址
string Ip = "61.175.232.30";
//取出IP地址去掉‘.’后的string数组
string [] Ip_List = Ip.Split (".".ToCharArray ());
string X_Ip = "";
//循环数组,把数据转换成十六进制数,并合并数组(3dafe81e)
foreach(string ip in Ip_List)
{
X_Ip += Convert.ToInt16 (ip).ToString ("x");
}
//将十六进制数转换成十进制数(1034938398)
long N_Ip = long.Parse (X_Ip, System.Globalization.NumberStyles.HexNumber);
|
OK,就这样转换成功了,不信,你可以用windows的命令行工具测试一下,ping 61.175.232.30 和 ping 1034938398 的效果是一样的,都是指向 61.175.232.30 的。
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn