根据文档提取原始数据

Raw data extraction according to a documentation

我必须从原始十六进制字符串中提取数据,如下所示:800200217fff8000bf5e0000 如您所见,我的数据有 12 个字节,所以根据这个,我在网上寻找解决方案,我找到了这个解决方案:

var s = "800200217fff8000bf5e0000"
var result = [];

for(var i = 0; i < s.length; i+=2)
{
    result.push(parseInt(s.substring(i, i + 2), 16));
}

result = Uint8Array.from(result)

所以现在,我有:

800200217fff8000bf5e0000 => 128,2,0,33,127,255,128,0,191,94,0,0

这是一个很好的观点。但是现在,我在数据提取方面遇到了麻烦。根据发送帧的设备的文档,我在第一个字节的描述中看到了这个:

位 |名称 |说明

7 |车位状态| 0 -> 空,1 -> 占用

6 |电池状态 | 0 -> 好水平,1 -> 差水平

5-4 |保留 |不考虑

3-2-1-0 |帧类型 | 0- 信息帧,1- 保持活动帧等...

所以我的第一个字节有 128 很好,但我真的不认为它会对我有很大帮助。我有一个解决方案,比如除以 128、64、32 等,如果该位为 1 或 0,则找到每个,但我认为这不是一个好的解决方案。

你知道一个很好的方法来执行我的数据解析吗?

使用bitwise operators:

var parking_slot_status = result[0] & 1;
var battery_state = result[0] & 2;

要获得第 7 位使用掩码 0x00000001 (1),要获得第 6 位使用 0x00000010 (2) 等等。