Kotlin Native如何将ByteArray转换为String?

Ste*_*ngo 6 kotlin kotlin-interop kotlin-native

我正在玩kotlin原生样本.我想知道如何StringpinnedByteArray 获得.只想在控制台中打印它.

Wil*_*zel 5

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

val byteArray = "Hello World".toByteArray(Charsets.UTF_8)   
val str = byteArray.toString(Charsets.UTF_8)
Run Code Online (Sandbox Code Playgroud)

如果您只想针对本地用户,请使用Sin的解决方案


Sin*_*Sin 5

看来这个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)
Run Code Online (Sandbox Code Playgroud)

看到这里.

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

  • 感谢@Willi Mentzel为stringFromUtf8`的源代码添加参考. (2认同)