linux 进制ip,ip与16进制互转,ip16进制

ip与16进制互转,ip16进制

piwik取ip:ip与16进制互转

装了一个piwik做站点分析,类似自建的站长统计。想提取访客ip做一些应用,发现不是直接存的ip。

1、存储

1.1 ip在数据库中以16进制存储

网络地址: 192.168.33.123

每一个值最大不会越过255,也就是十六进制的FF,两个Byte刚好表示的最大值是255,

这样子,就可以用一个32位的整形来保存这个地址

192 168 33 123

1100 0000 1010 1000 0010 0001 0111 1011

把这些二进制合在一起就是32位的数了

11000000101010000010000101111011

十进制为

3232244091

1.2 php

piwik是php语言,php中有ip2long(),long2ip()2个函数实现ip与进制互转

存到数据库中就是16进制的短地址了。

2、mysql

mysql内建函数支持

SELECT inet_ntoa(3520061481); –> 209.207.224.41

SELECT INET_ATON(‘209.207.224.41’); –> 3520061481

SELECT inet_ntoa(conv(hex(location_ip), 16, 10)) as ip, idvisitor

FROM piwik_log_visit;

3、oracle

piwik数据库用的mysql,我同步回本地的oracle,取ip实现如下:

select

idvisitor,trunc(ip/16777216)||'.'|| trunc( mod(ip, 16777216)/65536) ||'.'|| trunc(mod(ip,65536)/256)||'.'|| trunc(mod(ip,256)) as ip

from

(select idvisitor,location_ip as ip from PIWIK_LOG_VISIT)

3、java

如果数据库中取出来没转换好,需在程序中实现,java代码如下

long2ip:

public class test {

public static void main(String[] args) {

long lon = 0x1b9f160f;

String ip = "";

int[] b = new int[4];

b[0] = (int) ((lon >> 24) & 0xff);

b[1] = (int) ((lon >> 16) & 0xff);

b[2] = (int) ((lon >> 8) & 0xff);

b[3] = (int) (lon & 0xff);

ip = Integer.toString(b[0]) + "." + Integer.toString(b[1]) + "." + Integer.toString(b[2])+ "." + Integer.toString(b[3]);

System.out.println(ip);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值