将字节数组转换为十六进制字符串

2024-02-24

令人惊讶的是(对我来说),这段代码没有达到我想要的效果:

fun ByteArray.toHexString() : String {
    return this.joinToString("") { it.toString(16) }
}

事实证明Byte is signed,因此您会得到各个字节的负十六进制表示,这会导致完全虚假的最终结果。

Also, Byte.toString不会填充您想要的前导零。

什么是最简单的(没有额外的库,最好没有扩展)?最有效的修复?


由于我正在研究 Kotlin 1.3,您可能还对UByte很快(请注意,这是一个实验性功能。另请参阅科特林1.3M1 https://blog.jetbrains.com/kotlin/2018/07/see-whats-coming-in-kotlin-1-3-m1/ and 1.3M2公告 https://blog.jetbrains.com/kotlin/2018/08/kotlin-1-3-m2/)

E.g.:

@ExperimentalUnsignedTypes // just to make it clear that the experimental unsigned types are used
fun ByteArray.toHexString() = asUByteArray().joinToString("") { it.toString(16).padStart(2, '0') }

格式化选项可能是最好的其他变体(但可能不那么容易阅读......而且我总是忘记它是如何工作的,所以它绝对不是那么容易记住(对我来说:-)):

fun ByteArray.toHexString() = joinToString("") { "%02x".format(it) }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将字节数组转换为十六进制字符串 的相关文章

随机推荐