首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Scala中将十六进制字符串转换为Int、Short和Long

在Scala中将十六进制字符串转换为Int、Short和Long
EN

Stack Overflow用户
提问于 2012-05-26 13:04:01
回答 5查看 32.8K关注 0票数 37

只是找不到在Scala中将十六进制字符串转换为数字(Int,Long,Short)的方法。

有没有像"A".toInt(base)这样的东西

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-05-26 13:06:35

您可以使用Java库:

代码语言:javascript
复制
val number = Integer.parseInt("FFFF", 16)
> number: Int = 65535

或者如果你感到兴奋:-):

代码语言:javascript
复制
implicit def hex2int (hex: String): Int = Integer.parseInt(hex, 16)

val number: Int = "CAFE" // <- behold the magic
number: Int = 51966

此外,如果您不是专门尝试将字符串参数解析为十六进制,请注意Scala直接支持十六进制整数字面量。在这种情况下:

代码语言:javascript
复制
val x = 0xCAFE
> x: Int = 51966

Scala是不是很棒?:-)

票数 54
EN

Stack Overflow用户

发布于 2012-05-26 14:04:17

7zark7的答案是正确的,但我想做一些补充。从String隐含到Int可能是危险的。相反,您可以对包装器使用隐式转换,并显式调用解析:

代码语言:javascript
复制
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
票数 31
EN

Stack Overflow用户

发布于 2013-08-22 01:34:35

那么一行代码呢?

代码语言:javascript
复制
def hexToInt(s: String): Int = {
    s.toList.map("0123456789abcdef".indexOf(_)).reduceLeft(_ * 16 + _)
}

scala> hexToInt("cafe")
res0: Int = 51966

回答你的第二个问题:

是不是有类似于“A”.toInt(基础)的东西?

是的,仍然是一行:

代码语言:javascript
复制
def baseToInt(s: String, base: String): Int = {
    s.toList.map(base.indexOf(_)).reduceLeft(_ * base.length + _)
}

scala> baseToInt("1100", "01")
res1: Int = 12
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10763730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档