java.lang.Integer.parseInt 使用最高位的十六进制字符串失败

Posted

技术标签:

【中文标题】java.lang.Integer.parseInt 使用最高位的十六进制字符串失败【英文标题】:java.lang.Integer.parseInt fails with hex strings hat use the highest bit 【发布时间】:2013-04-07 01:13:17 【问题描述】:

我很惊讶以下从 32 位整数到十六进制字符串的向前向后转换失败:

Integer.parseInt(-2028332484.toHexString, 16)

给予:

java.lang.NumberFormatException: For input string: "871a1a3c"

显然是一种解决方法

java.lang.Long.parseLong(-2028332484.toHexString, 16).toInt

但我想知道是否没有更好的(可能是更多的 Scala 风格)解决方案?

【问题讨论】:

【参考方案1】:

Java 已经回答了here。

不幸的是,在 scala AFAIK 中没有针对这种转换的额外处理。

Scala 定义在RichInt:

def toHexString: String = java.lang.Integer.toHexString(self)

StringLike:

def toInt: Int         = java.lang.Integer.parseInt(toString)

除了import java.lang.Long => JLong 和使用JLong,我不知道比你的解决方案更 scala-ish。

【讨论】:

感谢您的链接。我看到parseInt(_, 16) 的对称对应物确实是toString(_, 16),而toHexString 没有对应物。

以上是关于java.lang.Integer.parseInt 使用最高位的十六进制字符串失败的主要内容,如果未能解决你的问题,请参考以下文章