如何在scala中将Mac地址作为String格式转换为Long?

时间:2016-02-04 08:20:26

标签: scala

我的问题是在scala中将字符串转换为long。 其中string的格式为Mac地址。 例如:

"fe:1a:90:20:00:00"  and "a0:b4:ac:c0:00:01"

如何使用scala转换long类型。

3 个答案:

答案 0 :(得分:4)

这可能有所帮助:

mac.split(":").map(Integer.parseInt(_,16)).foldLeft(0L) {case (acc,item) => acc*256+item}

第一次操作

mac.split(":") 

给出字符串数组,如数组(" fe"," 1a"," 90"," 20",&#34 ; 00"" 00&#34)。这个数组的每个项都是base-16编码的整数,所以我们可以将它转换为整数数组:

val arrayOfInts = mac.split(":").map(Integer.parseInt(_,16))

给出了第一个例子Array(254,26,144,32,0,0)。

最后要做的是将整数数组转换为long。数组的每一项都在[0,255]范围内,所以乘以256就足以保存该值,最后一次操作

arrayOfInts.foldLeft(0L) {case (acc,item) => acc*256+item} 

进行转换。它从0L开始,每个项目将结果乘以256并添加项目:

(((((((0L*256 + 254)*256 + 26)*256) + 144)*256 + 32)*256 + 0)*256) + 0

答案 1 :(得分:0)

答案 2 :(得分:0)

您可以使用Java库

def hex2Long(hex: String, removeDelimiter: String = ""): Long = {
    java.lang.Long.valueOf(hex.replaceAll(removeDelimiter, ""), 16)
}


scala> hex2Long("00:00:00:00:2f:59")
res2: Long = 12121