只是找不到在Scala中将十六进制字符串转换为数字(Int,Long,Short)的方法。
有没有像"A".toInt(base)这样的东西
发布于 2012-05-26 13:06:35
您可以使用Java库:
val number = Integer.parseInt("FFFF", 16)
> number: Int = 65535或者如果你感到兴奋:-):
implicit def hex2int (hex: String): Int = Integer.parseInt(hex, 16)
val number: Int = "CAFE" // <- behold the magic
number: Int = 51966此外,如果您不是专门尝试将字符串参数解析为十六进制,请注意Scala直接支持十六进制整数字面量。在这种情况下:
val x = 0xCAFE
> x: Int = 51966Scala是不是很棒?:-)
发布于 2012-05-26 14:04:17
7zark7的答案是正确的,但我想做一些补充。从String隐含到Int可能是危险的。相反,您可以对包装器使用隐式转换,并显式调用解析:
class HexString(val s: String) {
def hex = Integer.parseInt(s, 16)
}
implicit def str2hex(str: String): HexString = new HexString(str)
val num: Int = "CAFE".hex发布于 2013-08-22 01:34:35
那么一行代码呢?
def hexToInt(s: String): Int = {
s.toList.map("0123456789abcdef".indexOf(_)).reduceLeft(_ * 16 + _)
}
scala> hexToInt("cafe")
res0: Int = 51966回答你的第二个问题:
是不是有类似于“A”.toInt(基础)的东西?
是的,仍然是一行:
def baseToInt(s: String, base: String): Int = {
s.toList.map(base.indexOf(_)).reduceLeft(_ * base.length + _)
}
scala> baseToInt("1100", "01")
res1: Int = 12https://stackoverflow.com/questions/10763730
复制相似问题