javascript - 将值转换为 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) 但我收到的值不是数字:/
解决方案
显然,这些值被十六进制编码为 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)
推荐阅读
- python - 如何设置窗口和它的graphicScene透明(使用滑块)并只留下QPushButton可见
- netsuite - Netsuite 报告列表字段
- cs-cart - CS Cart 重复控制器索引页错误
- powershell - 按索引引用 ENUM
- c# - 将 viewbag int 值分配给 Html Helper 下拉列表
- python - 如何使用 Tensorflow 2.0 数据集在训练时执行 10 个裁剪图像增强
- python - 运行 main() 项目文件的快捷方式
- php - 如何在 PHP 的 (lib)cURL 中使用“双重代理”?
- python - 使用 Python 计算加泰罗尼亚语数?
- python - 设置 sample_weight_mode="temporal" 似乎不起作用