【问题标题】:How to convert Int to Hex String in Kotlin?如何在 Kotlin 中将 Int 转换为十六进制字符串?
【发布时间】:2017-05-30 01:42:24
【问题描述】:

我正在寻找与 Kotlin 中 Java 的 Integer.toHexString() 类似的功能。有没有内置的东西,还是我们必须手动编写一个函数来将Int转换为String

【问题讨论】:

  • 注意:我知道我可以使用 Java 中的 Integer 类 :) 我正在寻找一种纯 Kotlin 方法,如果有的话。
  • 大部分 kotlin 库只是在标准 Java 类之上提供扩展方法。该语言和库旨在使 Java 类的使用变得容易。为什么不使用 Integer.toHexString?除了冗余之外,替代实现会带来什么?
  • @JBNizet 我不反对使用Integer.toHexString() - 例如,看看下面@hotkey 提供的答案。简短且可从任何 Int 直接访问。我可以使用任何东西来完成我的任务,但我只是在寻找类似 Kotlin 的东西(如果有的话)。
  • @milosmns,更新了答案。 toString(radix: Int) 函数仍然会有所不同,因为 Integer.toHexString() 中使用了无符号转换,因此它可能不适合您。
  • 好的,知道了。这几乎回答了我想知道的一切

标签: numbers integer int hex kotlin


【解决方案1】:

你仍然可以通过调用java.lang.Integer上的静态函数来使用Java转换:

val hexString = java.lang.Integer.toHexString(i)

而且,从 Kotlin 1.1 开始,Kotlin 标准库中也有一个函数可以进行转换:

fun Int.toString(radix: Int): String

在指定的radix 中返回此Int 值的字符串表示形式。

但请注意,这仍然与Integer.toHexString() 不同,因为后者执行无符号转换:

println((-50).toString(16)) // -32
println(Integer.toHexString(-50)) // ffffffce

但是对于实验性的Kotlin unsigned types,现在可以通过负数无符号转换获得与Integer.toHexString(-50) 相同的结果:

println((-50).toUInt().toString(16)) // ffffffce

【讨论】:

  • 你可以通过先转换成long得到与Integer.toHexString()相同的结果:(-50).toLong().toString(16)返回ffffffce。另外,现在有UIntULong,所以很长一段时间,你可以使用toULong().toString(16)
【解决方案2】:

您可以简单地这样做: "%x".format(1234)

【讨论】:

  • 如果您希望十六进制字符串全部大写,也可以使用"%X".format(1234)
【解决方案3】:

如果您需要在小于 10(十六进制)的字节之前添加零,例如您需要字符串 - “0E”,然后使用: "%02x".format(14)

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 2020-12-09
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多