我必须从原始六角字符串中提取数据,例如: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,128,0,191,94,0,0,0
这是一个好点。但是现在,我在数据提取方面遇到麻烦。根据发送框架的设备的文档,我在第一个字节上的描述中阅读了此信息:
比特|名称|描述
7 |停车插槽状态|0->空,1->占领
6 |电池状态|0->良好的水平,1->不良级别
5-4 |保留|不要考虑
3-2-1-0 |框架类型|0-信息框架,1-保持框架等...
所以我的第一个字节有128,但我真的不认为这会对我有很大帮助。我有一个解决方案,例如除以128、64、32等,如果位是1或0,则可以找到每个解决方案,但我认为这不是一个好的解决方案。
您知道执行我的数据解析的好方法吗?
使用位算子:
var parking_slot_status = result[0] & 1;
var battery_state = result[0] & 2;
获得第七位使用蒙版0x00000001
(1(,以获得第六位使用0x00000010
(2(等。