Android 中的 BLE 设备响应:Kotlin 中向右浮点值的字节数组

问题描述

从 Gatt 特征读取后,我在从结果(部分)中获取正确的浮点值时遇到问题。 测量结果是一个4字节值(result1-4),表示为single-precision0 浮点数(IEEE 754-2008)

这是我的功能:

 private fun getMeasurementData(data: ByteArray?,results: Int?) {

    mDebugInfo!!.append("Read Measurements!\n")

    if (data != null && results != null && results > 0) {

        var r = results
        var i = 1

        while (r > 0) {
            var resultId1 = data[i]
            var resultId2 = data[i + 1]
            var measureType = data[i + 2]
            var measureStatus = data[i + 3]
            var datetime1 = data[i + 4]
            var datetime2 = data[i + 5]
            var datetime3 = data[i + 6]
            var datetime4 = data[i + 7]
            var result1 = data[i + 8]
            var result2 = data[i + 9]
            var result3 = data[i + 10]
            var result4 = data[i + 11]

            val bytes = byteArrayOf(result1,result2,result3,result4)
            val buffer = ByteBuffer.wrap(bytes,4).order(ByteOrder.LITTLE_ENDIAN)
            val float = buffer.getFloat()

            mDebugInfo!!.append(resultId1.toString() + " | " + resultId2.toString() + " | " + measureType.toString() + " | " + measureStatus.toString() + " | " + datetime1.toString() + " | " + datetime2.toString() + " | " + datetime3.toString() + " | " + datetime4.toString() + " | " + result1.toString() + " | " + result2.toString() + " | " + result3.toString() + " | " + result4.toString() + float +"\n")

            i = i + 16

            r--
        }
    }
}

结果 1-4 & val float 的 Byte.toString 的输出 (mDebugInfo) 是:

result1 result2 result3 result4 从 ByteBuffer 浮动
96 -14 -13 -14 647.5922785

测量的正确值是 7.59 - 此值“包含”在浮点结果中:647.59 22785

我如何只获得这个值?

解决方法

此解决方案对我有用:

var resultBytes =  byteArrayOf(result4,result3,result2,result1)

private fun getMeasurementValue(ba: ByteArray): String {
    var resultHex = ba.toHexString()
    var iRes = resultHex.toLong(16)
    var fRes = java.lang.Float.intBitsToFloat(iRes.toInt()) // This is the FLOAT Value (fRes)

    return String.format("%.2f",fRes)
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...