【发布时间】:2020-06-05 11:41:03
【问题描述】:
我正在尝试从我的血压袖带通过蓝牙接收的特定 ByteArray 中解析数据。根据这个规范GATT Appearance Characteristic Specification,数据是一个 16 位字节数组,有两个值——一个类别(10 位)和子类别(6 位)。我不知道如何读取未存储在字节中的值。如何从字节数组中读取 16 位中的 10 位和 16 位中的 6 位?那么一旦我有 10 位,我是否必须用 6 个零填充它才能得到一个值?我假设这些不是标志当然是潜在的字符串值。
我一直在尝试了解有关按位运算的各种tutorials 和guides,但它只是没有点击如何读取 10 位。
deviceConnection =
device.establishConnection(true)
.flatMapSingle {
for (g in gattCharacteristics) {
singles.add(it.readCharacteristic(g.uuid))
}
Single.zip(
singles
) { varargs ->
val values: MutableList<ByteArray> = mutableListOf()
for (v in varargs) {
values.add(v as ByteArray)
}
return@zip values
}
}
.observeOn(AndroidSchedulers.mainThread())
.take(1)
.subscribe(
{
characteristics.forEachIndexed { index, c ->
c.value = processByteArray(c.uuid, it[index])
}
serviceDetailsAdapter.notifyDataSetChanged()
},
{
onConnectionFailure(it)
}
)
然后在processByteArray函数中我需要弄清楚如何解析数据。
【问题讨论】:
-
你是如何使用java读取数据的?您正在使用哪些方法?你如何获取数据?更加详细一些。你正在读取两个 2 字节(16 位),你是如何得到它们的?
-
@Snix 我添加了我为读取特性而编写的代码。它是用 Kotlin 编写的,我正在实现 RxJava 和 RxAndroidBle 库。但是,我必须处理数据的解析,但我不知道该怎么做。