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 使用最高位的十六进制字符串失败的主要内容,如果未能解决你的问题,请参考以下文章