如何在android应用程序中将字节数组数据转换为浮点数据类型

问题描述

我正在创建一个应用程序并且有数据传入 onCharacteristicChanged 函数。我得到的数据是字节[]。我需要能够采用数据类型并能够拥有通过蓝牙发送到应用程序的浮点数。

代码如下:

Devicedisplay.MaindisplayInfo.Density

我收到的值是:

@Override
    public void onCharacteristicChanged(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic) {
        super.onCharacteristicChanged(gatt,characteristic);

        byte[] value = characteristic.getValue();
        Log.i(TAG,"" + value);
}

字节数组长度为 2。

我尝试使用:

[B@37719f8
[B@16fced1
[B@444ed36

但我得到一个 BufferUnderflowException。

我也试过:

float foo = ByteBuffer.wrap(value).order(ByteOrder.LITTLE_ENDIAN).getFloat();

但我没有得到正确的值。

谁能帮帮我?我需要从字节数组转换为浮点值,字节 [] 值的长度为 2。我是 Android 应用程序的新手。谢谢

解决方法

我认为您应该检查 onCharacteristicsChanged 中的字节真正代表什么。

下面的代码会将你的字节数组打印成一些可读的十六进制字符串。

  public static String byteToHexString(byte[] data) {
    StringBuffer buf = new StringBuffer();
    if (data != null) {
        for (int i = 0; i < data.length; i++) {
            int halfbyte = (data[i] >>> 4) & 0x0F;
            int two_halfs = 0;
            do {
                if ((0 <= halfbyte) && (halfbyte <= 9)) {
                    buf.append((char) ('0' + halfbyte));
                } else {
                    buf.append((char) ('a' + (halfbyte - 10)));
                }
                halfbyte = data[i] & 0x0F;
            } while (two_halfs++ < 1);

            buf.append(' ');
        }
    }
    return buf.toString();
}

我曾用自定义 ble 设备处理过一些项目,我一起工作的大多数(我认为可能是所有)程序员都使用 ascii 字节向我返回一些东西。