我必须从一个原始的十六进制字符串中提取数据,如下所示: 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,257,128,191,94,0
这是个不错的观点。但现在,我在数据提取方面遇到了麻烦。根据发送帧的设备的文档,我在第一个字节的描述中读取了以下内容:
位/名\\>描述
停车位状态0 ->空,1 ->被占用
6倍电池状态0 ->良好水平1 ->坏电平
保留的5-4 \x{e76f}不考虑
. frame =‘Frame 5’>型\ 0-信息帧,1-保持活帧等.
所以,我的第一个字节有128个字节,这很好,但我并不认为它对我有很大帮助。我有一个解决方案,比如除以128,64,32等,如果位数是1或0的话,每个都可以找到,但我不认为这是一个好的解决方案。
您知道如何很好地执行我的数据解析吗?
发布于 2017-04-21 13:30:54
使用位运算符
var parking_slot_status = result[0] & 1;
var battery_state = result[0] & 2;要获得第7位,请使用掩码0x00000001 (1),第6位使用0x00000010 (2)等等。
https://stackoverflow.com/questions/43543819
复制相似问题