Gar*_*n S 4 ip scala ip-address ipv4
我正在寻找一个具有2个函数的基本实用程序,用于在Scala中将IPv4地址转换为Long,例如将"10.10.10.10"转换为168430090的Long表示并返回.诸如此类的基本实用程序存在于许多语言(例如python)中,但似乎需要为JVM的每个人重写相同的代码.
统一IPv4ToLong和LongToIPv4功能的推荐方法是什么?
小智 6
结合leifbatterman和Elesin Olalekan Fuad的想法,避免乘法和动力操作:
def ipv4ToLong(ip: String): Option[Long] = Try(
ip.split('.').ensuring(_.length == 4)
.map(_.toLong).ensuring(_.forall(x => x >= 0 && x < 256))
.reverse.zip(List(0,8,16,24)).map(xi => xi._1 << xi._2).sum
).toOption
Run Code Online (Sandbox Code Playgroud)
要以点分格式将Long转换为String:
def longToipv4(ip: Long): Option[String] = if ( ip >= 0 && ip <= 4294967295L) {
Some(List(0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000).zip(List(0,8,16,24))
.map(mi => ((mi._1 & ip) >> mi._2)).reverse
.map(_.toString).mkString("."))
} else None
Run Code Online (Sandbox Code Playgroud)