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

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

【问题讨论】:

  • 在该数组中用于将字符转换为字节的编码是什么?

标签: kotlin kotlin-interop kotlin-native


【解决方案1】:

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

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) 如何帮助我?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 2010-10-28
    • 2016-05-25
    相关资源
    最近更新 更多