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



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

您仍然可以通过在 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 无符号类型,现在可以从负数无符号转换中获得与 Integer.toHexString(-50) 相同的结果:

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

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

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

这是新的 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

最新更新