当我尝试通过蓝牙从设备检索值时,它以 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/