在Kotlin中如何将Int转换为十六进制字符串?

80
我正在寻找在Kotlin中类似于Java的Integer.toHexString()的功能。是否有内置的方法,还是我们需要手动编写一个将Int转换为String的函数?

大多数Kotlin库只是在标准Java类的基础上提供扩展方法。该语言和库旨在使使用Java类变得容易。为什么不使用Integer.toHexString?除了冗余之外,另一种实现会带来什么? - JB Nizet
@JBNizet 我并不反对使用 Integer.toHexString() - 例如,可以看一下 @hotkey 在下面提供的答案。这个方法简短且可以直接从任何 Int 访问。我可以使用任何东西来完成我的任务,但如果有类似 Kotlin 的东西就更好了。 - milosmns
@milosmns,已更新答案。toString(radix: Int)函数仍然会有所不同,因为在Integer.toHexString()中使用了无符号转换,所以它可能并不适合您。 - hotkey
好的,明白了。这基本上回答了我想知道的一切。 - milosmns
所以,您想定义一个调用Integer.toHexString()的扩展方法?不在Kotlin中重新实现该函数?这里是:fun Int.toHexString() = Integer.toHexString(this) - JB Nizet
显示剩余2条评论
4个回答

109

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

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

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

fun Int.toString(radix: Int): String

将这个 Int 值以指定的 radix 进制表示为字符串。

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

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

然而,使用实验性的Kotlin 无符号类型,现在可以从将负数转换为无符号数获得与Integer.toHexString(-50)相同的结果:

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

3
你可以先转换为长整型,然后得到与 Integer.toHexString() 相同的结果:(-50).toLong().toString(16) 返回 ffffffce。此外,现在还有 UIntULong,所以对于长整型,你可以使用 toULong().toString(16) - Tenfour04

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

12
如果您想要将十六进制字符串输出为大写字母,可以使用"%X".format(1234)。请注意,这不会改变原始数据的含义。 - Dhiraj Gupta
请你能否对此进行更详细的解释?(我是刚开始学习 Kotlin 的) - undefined

24
如果你需要在十六进制数小于10的字节前添加0,例如你需要字符串-"0E",那么请使用:"%02x".format(14)

0
这里是新的 Kotlin 1.9.0 标准库 HexFormat
(不要忘记在需要的地方添加 @OptIn(ExperimentalStdlibApi::class)
val myHexFormat = HexFormat {
    upperCase = false
    number.prefix = "#"
    number.removeLeadingZeros = true
}
val myInt = 0xb40e89
myInt.toHexString(myHexFormat)         // #b40e89

你还可以使用Kotlin预定义的HexFormat
val myInt = 0xb40e89
myInt.toHexString(HexFormat.Default)   // 00b40e89
myInt.toHexString(HexFormat.UpperCase) // 00B40E89

要从ARGB整数中排除alpha通道,可以使用以下解决方法:
(myInt and 0xFFFFFF).toHexString(myHexFormat)

并投票支持此问题:在使用HexFormat格式化时不能忽略alpha通道


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接