使用Kotlin将Hex值转换为Base64

问题描述 投票:1回答:1

我有这个价值:

263e5df7a93ec5f5ea6ac215ed957c30

当我填写这个:https://8gwifi.org/base64Hex.jsp(Hex到Base64)它让我回来:

Jj5d96k+xfXqasIV7ZV8MA==

这是预期值。但是,当我在Kotlin尝试这个时,

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

它让我回来:

MjYzZTVkZjdhOTNlYzVmNWVhNmFjMjE1ZWQ5NTdjMzA=

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

kotlin base64 hex
1个回答
1
投票

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

相反,toByteArray(UTF_8)以UTF-8编码对字符串进行编码,将每个字符串转换为一个或多个字节。当您将这些字节转换为base64时,首先得到更长的结果,然后是第二个 - 这些是完全不同的字节。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.