【问题标题】:Cast from bytearray to hexa Kotlin从 bytearray 转换为 hexa Kotlin
【发布时间】: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


【解决方案1】:

正如其他人已经提到的,在字节数组中有一个负数仅意味着该数字大于 127。

关于如何将它们显示为十六进制的问题,您可以使用内置的字符串格式化函数。您可以在 joinToString 调用中添加一个转换块,它可以将您的字节转换为十六进制字符串:

val dataparsed = data?.joinToString ( " : " ) { "%02x".format(it) }

这样您的输出将被正确格式化。

【讨论】:

  • 这正是我正在寻找的,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-09-03
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多