2016-02-04 56 views
0

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

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

如何使用Scala的长型转换。

+0

你想获得一个每个地址长或6%的地址多头(一个很长的部分)?在第一种情况下,移除冒号并在第二种情况下分析冒号中的十六进制数字,然后解析。 – Thomas

+0

每个地址6个长码 – sk1007

+1

为什么'长',然后呢?你知道每个值都是8位...... –

回答

4

这可有助于:

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

第一操作

mac.split(":") 

给出字符串数组,像阵列( “FE”, “1A”, “90”, “20”,“00 ”, “00”)。这个阵列的每个产品的基16编码的整数,因此我们可以将其与转换成的整数数组:

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

这给出了第一示例阵列(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 
+0

有人解释吗? – sk1007

+0

看我的编辑.... – Nyavro

+0

谢谢其实我在最后一步感到困惑。 – sk1007