Javascript 判断16进制某位数据是否为1
因为物联网设备上来的都是16进制的数据,但某些数据是需要判断某一个16位数据的二进制位,因此需要判断某一位是否为1。
例如:
16进制 0x11 展开后二进制是 00010001
如果用toString(2) 转换为字符串,就成 10001,这样判断也不是很方便。因此还是位移方便。而且转换字符串后对系统的负担也会对应的增大。
采用& 与运算 ,然后位移对应的位数即可。
这里贴出一段代码,就不再详细说了,看代码比较明了
//485数据 原始数据类型:FA 02 00 00 00 D0 F5
//FA:帧头
//02:数据长度
//00:状态正常 04:报警
//00 BIT7-6 00:正常/01故障; BIT5-4 00:正常/01:低压; BIT3 0:正常/1被拆(暂无、预留) BIT2-0 000正常/001测试/010消音
01020304
//00:CRC16 高字节
//D0: CRC16 低字节
//F5: 数据帧尾
if (bytes[0] == 0xFA) {
if (bytes[2] == 0x04) {
data.Alarm = true;
} else {
data.Alarm = false;
}
let tmp = bytes[3]
if (((tmp & 0x01)) == 1) {
data.keyStatus = "测试"
} else if (((tmp & 0x02) >> 1) == 1) {
data.keyStatus = "消音"
} else {
data.keyStatus = "正常"
}
if (((tmp & 0x10) >> 4) == 1) {
data.LowPower = true;
} else {
data.LowPower = false;
}
//
if (((tmp & 0x40) >> 6) == 1) {
data.Status = false
} else {
data.Status = true
}
}
//如果感觉if太长,可以简化,但是多层if的不清楚怎么简化,知道的朋友可以给发下。
if (bytes[0] == 0xFA) {
data.Alarm = (bytes[2] == 0x04) ? true : false;
let tmp = bytes[3]
if (((tmp & 0x01)) == 1) {
data.keyStatus = "测试"
} else if (((tmp & 0x02) >> 1) == 1) {
data.keyStatus = "消音"
} else {
data.keyStatus = "正常"
}
data.LowPower = (((tmp & 0x10) >> 4) == 1) ? true : false;
data.Status = (((tmp & 0x40) >> 6) == 1) ? false : true;
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。