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

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

fun ByteArray.toHexString():String{
返回此.joinToString(“”{it.toString(16)}
}

原来Byte有符号的,所以每个字节都有负十六进制表示,这会导致完全虚假的最终结果

另外,Byte.toString不会填充前导零,这是您在这里想要的

最简单的(没有附加库,理想情况下没有扩展)resp是什么。最有效的修复

由于我使用的是Kotlin 1.3,您可能很快也会对UByte感兴趣(请注意,这是一项实验性功能。另请参见Kotlin 1.3M1和1.3M2公告)

例如:

@ExperimentalUnsignedTypes//只是为了明确使用了实验性的无符号类型
fun ByteArray.toHexString()=asubytarray().joinToString(“”{it.toString(16).padStart(2,'0')}

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

fun ByteArray.toHexString()=joinToString(“”{“%02x.format(it)}

发表评论