首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Kotlin中将Long转换为Base64

在Kotlin中将Long转换为Base64
EN

Stack Overflow用户
提问于 2020-10-18 05:20:59
回答 1查看 123关注 0票数 0

我需要将类型为Long的值转换为Base64编码。

我尝试将其转换为byte[],然后将其传递给Base64.encodeToString,但得到了错误的答案。

我查看了这里的许多示例,但都没有帮助。也许我误解了encodeToString的工作原理?

EN

回答 1

Stack Overflow用户

发布于 2020-10-18 05:55:34

使用this answer来回答“如何将Long转换为byte[]并在Java语言中返回”的问题:

代码语言:javascript
复制
import java.nio.ByteBuffer
import java.util.Base64

fun main() {
    val number: Long = 12345678
    val encodedNumberString = Base64.getEncoder().encodeToString(longToBytes(number))
    println("Number: $number.")
    println("Encoded number: \"$encodedNumberString\".")
    val decodedNumberBytes = Base64.getDecoder().decode(encodedNumberString)
    val decodedNumber = bytesToLong(decodedNumberBytes)
    println("Decoded number: $decodedNumber.")
}

private fun longToBytes(number: Long): ByteArray {
    val buffer = ByteBuffer.allocate(java.lang.Long.BYTES)
    buffer.putLong(number)
    return buffer.array()
}

private fun bytesToLong(bytes: ByteArray): Long {
    val buffer = ByteBuffer.allocate(java.lang.Long.BYTES)
    buffer.put(bytes)
    // Prepare the byte buffer to enable reading from it.
    buffer.flip()
    return buffer.long
}

这是我系统上的输出:

代码语言:javascript
复制
Number: 12345678.
Encoded number: "AAAAAAC8YU4=".
Decoded number: 12345678.

更新: Base64

Base64是一种将二进制数据转换为文本的方法,它使用64个字符的安全子集,可以在例如电子邮件附件中传输。并非一个字节中的所有256个值都可以顺利发送,因此每个字符中只编码6位(2^6 = 64)。这意味着可以用4个字符传输3个字节(开销为33%)。

更新:扩展函数

正如Alex.T已经在评论中提到的,Kotlin使您能够使用扩展函数使长的<-> ByteArray转换更短(假设ByteArray实现有一个可访问的后备数组):

代码语言:javascript
复制
fun Long.toByteArray(): ByteArray = ByteBuffer.allocate(java.lang.Long.BYTES).apply { putLong(this@toByteArray) }.array()
fun ByteArray.toLong(): Long = ByteBuffer.allocate(java.lang.Long.BYTES).apply { put(this@toLong); flip() }.long

fun main() {
    val number = 12345678L
    val encodedNumberString = Base64.getEncoder().encodeToString(number.toByteArray())
    println("Encoded number: \"$encodedNumberString\".")
    val decodedNumber = Base64.getDecoder().decode(encodedNumberString).toLong()
    println("Decoded number: $decodedNumber.")
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64407458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档