【问题标题】:Long/Int in scala to hex stringScala 中的 Long/Int 到十六进制字符串
【发布时间】:2016-09-15 07:52:22
【问题描述】:

使用Integer.toString(1234567, 16).toUpperCase() // output: 12D68 可以帮助将Int 转换为十六进制字符串。

如何对 Long 做同样的事情?

Long.toString(13690566117625, 16).toUpperCase() // but this will report error

【问题讨论】:

  • 你遇到了什么错误?如果您使用“13690566117625L”结尾加上 L 怎么办?
  • @kennytm,Long.toString(13690566117625L, 16).toUpperCase(),它会说error: too many arguments for method toString: ()String

标签: scala hex long-integer


【解决方案1】:

您正在寻找RichLong.toHexString:

scala> 13690566117625L.toHexString
res0: String = c73955488f9

还有大写的变体:

scala> 13690566117625L.toHexString.toUpperCase
res1: String = C73955488F9

编辑

这也适用于Int 通过RichInt.toHexString

scala> 42.toHexString
res4: String = 2a

【讨论】:

  • 链接失效
  • @piegames 已修复。
【解决方案2】:
val bigNum: Long   = 13690566117625L
val bigHex: String = f"$bigNum%X"

使用%X 获取大写十六进制字母,使用%x 获取小写。

【讨论】:

  • 你也可以做填充,例如长度为 16 的零,如下所示:f"$bigNum%016X"
  • 确实如此。您还可以将标准十六进制名称添加到格式化输出:f"$myNum%#x" 结果为0x1c4。一种以多种不同十六进制格式表达值的简洁方法。
【解决方案3】:

我发现 f"0x$int_val%08X"f"0x$long_val%16X" 在您想要将值与前导零对齐时效果很好。

scala> val i = 1
i: Int = 1

scala> f"0x$i%08X"
res1: String = 0x00000001

scala> val i = -1
i: Int = -1

scala> f"0x$i%08X"
res2: String = 0xFFFFFFFF

scala> val i = -1L
i: Long = -1

scala> f"0x$i%16X"
res3: String = 0xFFFFFFFFFFFFFFFF

【讨论】:

    【解决方案4】:

    您有几个错误。首先,数字13690566117625 太大而无法放入int,因此您需要添加L 前缀以表明它是long 文字。其次,Long 没有采用基数的toString 方法(与Integer 不同)。

    解决方案:

    val x = 13690566117625L
    x.toHexString.toUpperCase
    

    【讨论】:

      【解决方案5】:

      使用 Scala 的好处是能够使用 Java 库。

      所以,你可以实现:

      import scala.util.Try
      val longToHexString = Try(java.lang.Long.toString(13690566117625, 16)) // handle exceptions if any
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-27
        • 2013-02-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-04
        • 2011-02-14
        相关资源
        最近更新 更多