Kotlin Native 如何将 ByteArray 转换为 String?

Posted

技术标签:

【中文标题】Kotlin Native 如何将 ByteArray 转换为 String?【英文标题】:Kotlin Native how to convert ByteArray to String? 【发布时间】:2018-09-03 04:48:06 【问题描述】:

我在玩kotlin-native samples。 我想知道如何从pinned ByteArray 获得String。只想在控制台打印出来。

【问题讨论】:

在该数组中用于将字符转换为字节的编码是什么? 【参考方案1】:

如果您需要 JVM 的解决方案,因为 stringFromUtf8 仅适用于本机平台,请使用 toString 和 Charset 作为参数:

val byteArray = "Hello World".toByteArray(Charsets.UTF_8)   
val str = byteArray.toString(Charsets.UTF_8)

如果您只想定位原生,请使用Sin's solution。

【讨论】:

【参考方案2】:

这个API好像变了

现在只需使用这个:string.toUtf8(start, end)

https://github.com/JetBrains/kotlin-native/commit/cba7319e982ed9ba2dceb517a481cb54ed1b9352#diff-45a5f8d37067266e27b76d1b68f01173

旧版:

使用stringFromUtf8

/**
 * Converts an UTF-8 array into a [String]. Replaces invalid input sequences with a default character.
 */
fun ByteArray.stringFromUtf8(start: Int = 0, size: Int = this.size) : String =
        stringFromUtf8Impl(start, size)

见here。

如果 byteArray 通过互操作 C API 类似于 CPointer<ByteVar>,请在 Kotlin-Native 中使用 .toKString()

【讨论】:

感谢@Willi Mentzel 为stringFromUtf8 的源代码添加参考。 非常感谢。但是我在引用的链接(here: StringBuilder.kt)中找不到stringFromUtf8的来源。 此 API 已被弃用......ReplaceWith("string.toUtf8(start, end)" github.com/JetBrains/kotlin-native/commit/… 问题是关于将 ByteArray 转换为 String? string.toUtf8(start, end) 如何帮助我?

以上是关于Kotlin Native 如何将 ByteArray 转换为 String?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 java 库添加到 kotlin 本机

使用来自 Kotlin/Native 和 Gradle 的 Apple 依赖项,更具体地说是 SwiftUI

如何在 kotlin native 中使用 swift 库?

Kotlin/Native 垃圾收集器如何在 C 中工作?

在 Kotlin Native 中,如何在不使用 C 指针的情况下将对象保留在单独的线程中,并从任何其他线程中改变其状态?

如何使用 Kotlin 同时定位 JVM/Native 和 Android