我的问题是在scala中将字符串转换为long。 其中string的格式为Mac地址。 例如:
"fe:1a:90:20:00:00" and "a0:b4:ac:c0:00:01"
如何使用scala转换long类型。
答案 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)
我在github中找到了答案: https://github.com/ppurang/flocke/blob/master/core/src/main/scala/org/purang/net/flocke/MacAddress.scala
答案 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