首页 > 解决方案 > 将值转换为 Int

问题描述

我正在创建一个从 ble 设备获取数据的 Android 应用程序。我只有一个问题,我的 ble 设备给我的数据是这样的:

加速度计 + 陀螺仪:“zLAi/wD/SpwiAOv/VwBnAML/xQE=”

压力:“bgBvAHAAcQByAA=”

电池:“ChYKARoA”

虽然应该有数字,但如何转换这些值?

例如我有这个功能来管理Characteristics

async setupNotifications(device) {
    for (const id in this.AccGyrMg) {

      const service = this.serviceUUID(id)
      const characteristicAccGyrMg = this.notifyUUIDAccGyrMg(id)


      device.monitorCharacteristicForService(service, characteristicAccGyrMg, (error, characteristic) => {
        if (error) {
          this.error(error.message)
          return
        }
        this.updateValue(characteristic.uuid, characteristic.value)
      })
    }

这是更新值:

updateValue(key, value) {
  //        const readebleData = base64.decode(value);
    this.setState({ values: { ...this.state.values, [key]: value } })
  }

我尝试使用 base64.decode(value) 但我收到的值不是数字:/

标签: javascriptreact-native

解决方案


显然,这些值被十六进制编码为 base64。我找不到任何文档,但它基于这个 Github 问题:monitorCharacteristicForService value is fragmented

我使用此工具将您的 base64 转换为十六进制:

加速度计 + 陀螺仪: “zLAi/wD/SpwiAOv/VwBnAML/xQE=”

cc b0 22 ff 00 ff 4a 9c 22 00 eb ff 57 00 67 00 c2 ff c5 01

压力: “bgBvAHAAcQByAA=”

6e 00 6f 00 70 00 71 00 72 00

电池: “ChYKARoA”

0a 16 0a 01 1a 00

不幸的是,如果不知道该设备的规格,就不可能将这些十六进制值转换为数字。制造商可以从无数种方法中选择将数字映射到十六进制值。您要么必须找到协议文档,要么对其进行逆向工程。

以下是另一个 BLE 设备如何将数字转换为十六进制的示例(搜索“通知包含”)。你会发现这样的部分:

通知由 6 个字节组成:

byte 0: 02
byte 1: 01
byte 2: XY (see below)
byte 3: valve open state in % (from 0x00 to 0x64)
byte 4: undefined (battery level?)
byte 5: (temperature * 2)

推荐阅读