如何在 Kotlin 中将 Int 类型转换为 Char 类型

24

使用Java原始类型将字符代码转换为符号很容易

int i = 65;
char c = (char) i; // 'A'

如何使用 Kotlin 实现相同的功能?

2个回答

38

2
但它将int截断为16位,因此128104.toChar()无法得到期望的结果。 - fdermishin
@fdermishin 那么使用 Long,而不是 Int。 - david.barkhuizen
@david.barkhuizen 这样是行不通的。 返回具有与该数字相等的数值的Char,如果适当,则截断为16位。 https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/to-char.html - fdermishin
1
@fdermishin 同意。请查看我的完整答案以获取正确的解决方案。 - david.barkhuizen

1

首先使用 ByteBuffer 将 Int 转换为 ByteArray(使用正确的字节顺序),然后使用适当的 String 构造函数。

import java.nio.ByteBuffer
import java.nio.ByteOrder
import java.nio.charset.Charset

fun intToByteArray(n: Int, byteOrder: ByteOrder) =
    ByteBuffer.allocate(4).order(byteOrder).putInt(n).array()

fun byteArrayToUnicode(ba: ByteArray, charSet: Charset) =
    String(ba, charSet)

fun intToUniCode(n: Int, byteOrder: ByteOrder, charSet: Charset) =
    byteArrayToUnicode(intToByteArray(n, byteOrder), charSet)

fun test() {
    val charSet = Charset.forName("UTF-32BE")
    val n = 0x000000f7 // division sign (U+00F7)
    val s = intToUniCode(n, ByteOrder.BIG_ENDIAN, charSet)
    println(s)
}

从技术上讲,这个解决方案是针对使用 Kotlin 的 Java,无法在本机 Kotlin 中工作。 - treesAreEverywhere
同意。旨在针对在Android上运行的JVM的Kotlin,并已确认可以在那里正常工作。 - david.barkhuizen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接