android 如何在Kotlin中将十六进制字符串转换为ASCII字符串

ws51t4hk  于 2022-12-09  发布在  Android
关注(0)|答案(1)|浏览(727)

我通过BLE模块在应用程序中收到一个六边形字符串Hex string
0031302 D31300 D 0A型激光器
此ASCII字符串为10-10\r\n(表示x轴和y轴的坐标)。我尝试使用toCharArray函数将数组转换为ASCII,这样就可以解析字符串并获取x和y值,但它在logcat中返回的字符串如下所示[C@3cea859
我也尝试创建一个函数,但它返回的字符串类型与

fun String.decodeHex(): ByteArray{
        check(length % 2 == 0){"Must have an even length"}
        return chunked(2)
            .map { it.toInt(16).toByte() }
            .toByteArray()
    }
vawmfj5a

vawmfj5a1#

就快到了。你只需要把ByteArray转换成String。标准的toString()方法来自Any类型(相当于Java的Object)。ByteArray不会覆盖它来给予你想要的。相反,使用String构造函数或toString(Charset)函数:

fun String.decodeHex(): String {
    require(length % 2 == 0) {"Must have an even length"}
    return chunked(2)
        .map { it.toInt(16).toByte() }
        .toByteArray()
        .toString(Charsets.ISO_8859_1)  // Or whichever encoding your input uses
}

(Note在该上下文中requirecheck更合适。

相关问题