使用Kotlin将Hex值转换为Base64

时间:2019-04-29 12:04:07

标签: kotlin base64 hex

我有这个值:

_Alignof(max_align_t)

当我填写以下内容时:https://8gwifi.org/base64Hex.jsp(十六进制为Base64) 它给了我:

263e5df7a93ec5f5ea6ac215ed957c30

这是期望值。但是,当我在Kotlin尝试此操作时,

Jj5d96k+xfXqasIV7ZV8MA==

它给了我回馈:

val encodedHexB64 = Base64.encodeToString("263e5df7a93ec5f5ea6ac215ed957c30".toByteArray(UTF_8), Base64.NO_WRAP)

如何在Kotlin中获得正确的值?

2 个答案:

答案 0 :(得分:1)

看起来输入字符串代表16个字节,其中每个字节都用该字符串的两个十六进制字符编码。

相反,toByteArray(UTF_8)使用UTF-8编码对字符串进行编码,从而将每个字符转换为一个或多个字节。将这些字节转换为base64时,首先获得更长的结果,其次-它们是完全不同的字节。

我想将输入的十六进制字符串转换为字节数组的正确方法是:

    val input = "263e5df7a93ec5f5ea6ac215ed957c30"
    val bytes = input.chunked(2).map { it.toInt(16).toByte() }.toByteArray()

然后像往常一样将这些bytes编码为base64。

答案 1 :(得分:0)

要完成上一个操作:

flatMap()

现在您拥有:Jj5d96k + xfXqasas77V8MA ==