string - 如何将带有 null 终止字符的字节数组转换为 Kotlin 中的字符串?

标签 string kotlin character-encoding null-terminated

当我尝试通过蓝牙从设备检索值时,它以 ASCII 形式显示,作为空终止的大端值。设备软件是用C编写的。我想检索十进制值,即0而不是48,1而不是49,9而不是57等。

@Throws(IOException::class)
fun receiveData(socket: BluetoothSocket ? ): Int {
 val buffer = ByteArray(4)
 val input = ByteArrayInputStream(buffer)
 val inputStream = socket!!.inputStream
 inputStream.read(buffer)

 println("Value: " + input.read().toString()) // Value is 48 instead of 0, for example.

 return input.read()
}

如何检索我想要的值?

最佳答案

使用bufferedReader很容易做到:

val buffer = ByteArray(4) { index -> (index + 48).toByte() }     // 1
val input = ByteArrayInputStream(buffer)

println(input.bufferedReader().use { it.readText() })            // 2
// println(input.bufferedReader().use(BufferedReader::readText)) // 3

Will output “0123”。

1。只需使用 init 函数对套接字的内容进行 stub ,该函数将缓冲区的第一个元素设置为 48,第二个元素设置为 49,第三个元素设置为 50,第四个元素设置为 51。

2。默认字符集是UTF-8,即"superset" of ASCII .

3。这只是另一种调用 { it.readText() } 的方式。

关于string - 如何将带有 null 终止字符的字节数组转换为 Kotlin 中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53678635/

相关文章:

java - 使用子字符串(Java)的用户输入字符串的最后两个字母

android - ViewModel 中的 Kotlin Dagger 字段注入(inject)引发 Dagger/Binding 异常

android - 蓝牙连接的线程在连接后立即关闭 socket

gradle - 如何从 Gradle 中运行 Kotlin-Script (*.kts) 文件?

python,我无法在重新搜索后保存特殊字符,例如 θæŋ

ruby - 如何在 Ruby 中可逆地转义 URL 以便将其保存到文件系统

php - 如何在 Jquery 和 PHP 中连接字符串

java - 如何使用 apache httpclient fluent 4.3.2 在请求中设置字符集

c# - 为什么是 str = str.Replace().Replace();比 str = str.Replace(); 快str = str.替换()?

Delphi - 获取Windows的默认非unicode字符集