【发布时间】:2019-08-27 09:25:58
【问题描述】:
我正在开发一个应用程序,它使用 ble 接收连续的数据流,此时我正确读取了设备发送的流,但实际上我不知道如何解释它。
这是我的 onCharacteristicChanged 函数
override fun onCharacteristicChanged(
gatt: BluetoothGatt,
characteristic: BluetoothGattCharacteristic?
) {
if (characteristic != null && characteristic.properties == BluetoothGattCharacteristic.PROPERTY_NOTIFY) {
Log.e(TAG, "**THIS IS A NOTIFY MESSAGE")
}
if (characteristic != null) {
data = characteristic.value
Log.e("onCharacteristicChanged", "Datos:")
Log.e("onCharacteristicChanged", "$data")
val dataparsed = data?.joinToString ( " : " )
Log.e("onCharacteristicChanged", "$dataparsed")
broadcastUpdate("com.np.lekotlin.ACTION_DATA_AVAILABLE")
}
}
每次设备向我发送一些信息时都会调用此函数,并返回类似这样的退出:
我们可以看到对同一数据的两种解释
未经处理的数据(字节数组): [乙@**** 以及 joinToString 之后的数据(我认为它会帮助我转换成六进制的函数): ** : **: **: **: **: **: **: **: **: **
当我将此输出与我正在使用的另一个软件 CySmart 返回的结果进行比较时,我的问题就出现了
Wich 会返回类似的东西
07:94:02:5A:56:00:76:35:00:00
07:2F:02:5F:45:00:B0:36:00:00
07:E4:01:50:47:00:6D:37:00:00
07:0C:02:53:4A:00:56:38:00:00
这个输出显然遵循一个模式,例如前 7 和最后 2 组 0,但负数让我感到困惑。
所以,总而言之,我的问题是,在 kotlin 中是否存在从 bytearray 转换为 hexa 的任何本地方式? (没有负数) 如果我已经正确地投射它,你知道我该如何对待,或者负数的赞助人是什么?看起来像是 2 的补码或类似的东西,但我不确定。
非常感谢您的建议。
【问题讨论】:
-
negative numbers are baffling me— JVM 对所有内容都使用有符号数,对于有符号数,最高有效位“显示”数字的符号(0 — 正数,1 — 负数)。因此,如果您仅将无符号数视为有符号数,则高于 127(0111 1111) 的所有内容都是负数。 -
谢谢,但是例如我如何解释-91?像 1001 0001 ?或者?对不起,我有点困惑
-
我已经知道2s补码的理论,但我指的是我应该如何处理这个数字:二进制中的-91是-1011011,在2s补码中我得到0100101,然后我应该传递给六边形?比如获得 25 ??
标签: arrays kotlin hex bluetooth-lowenergy