IP地址点分十进制格式 与 数值格式 相互装换

scala 版本

  def ip2Long(ipString: String): Long = { // 取 ip 的各段
    val ips= ipString.split("\\.")
    var rs:Long = 0
    for(i <- ips){
      rs= i.toLong | rs<< 8L
    }
    rs
  }

import java.net.InetAddress
  def long2Ip(ipLong: Long): String = {
  	val bytes: Array[Byte] = new Array[Byte](4)
  	bytes(0) = ((ipLong& 0xff000000) >> 24).toByte
  	bytes(1) = ((ipLong& 0x00ff0000) >> 16).toByte
  	bytes(2) = ((ipLong& 0x0000ff00) >> 8).toByte
  	bytes(3) = (ipLong& 0x000000ff).toByte
  	InetAddress.getByAddress(bytes).getHostAddress()
  }

JAVA 版本

    public static long ip2Long(String ipString) {
        // 取 ip 的各段
        String[] ipSlices = ipString.split("\\.");
        long rs = 0;
        for (String i:ipSlices){
            rs=  Long.parseLong(i) | rs<< 8L;
        }
        return rs;
    }


    public static String long2Ip(long ipLong) {
        String[] ipString = new String[4];
        for (int i = 0; i < 4; i++) {
            // 每 8 位为一段,这里取当前要处理的最高位的位置
            int pos = i * 8;
            // 取当前处理的 ip 段的值
            long and = ipLong & (255 << pos);
            // 将当前 ip 段转换为 0 ~ 255 的数字,注意这里必须使用无符号右移
            ipString[3-i] = String.valueOf(and >>> pos);
        }
        return String.join(".", ipString);
    }

Python 版本

import struct
import socket
import  os

def long2Ip(int_ip):
    ip = socket.inet_ntoa(struct.pack('I', socket.htonl(int_ip)))
    return ip

def ip2long(string_ip):
    return struct.unpack("!L", socket.inet_aton(string_ip))[0]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值