我遇到的问题是我有一条以字节为单位的警报消息
示例: 1) 0000 0001 - 是警报 1 2) 0000 0010 - 是警报 2 3) 0000 1000 - 是警报 3 4) 1000 0000 - 是警报4
所以问题是,如果警报 1 和警报 4 同时出现,则字节如下所示: 1000 0001 如果是警报 1、2 和 4,则字节如下: 1000 0011 是否可以使用 JavaScript 函数获取警报的所有可能组合?
我知道只有 4 位,但这只是一个例子,我有一些全 8 位
提前谢谢
最佳答案
这样的事情可以通过“正常”位比较来获取所有位:
var val = 0b00000101;
function GetBits(val){
var i = 1, res = [];
while(i<=val){
if(i & val) res.push(i);
i <<=1;
}
return res;
}
console.log(GetBits(val));
但看起来好像使用了备用位掩码?
如果警报是数组中每个具有自定义掩码的对象,您可以使用过滤器
:
var alarms = [
{descr: 'Alarm 1', mask : 1},
{descr: 'Alarm 2', mask : 2},
{descr: 'Alarm 3', mask : 0b1000},
{descr: 'Alarm 4', mask : 0b10000000}
];
var val = 0b10000011;
var alarmsInVal = alarms.filter(function(a){ return val & a.mask;});
console.log(alarmsInVal);
以及获取上述过滤值的字符串的示例:
var descr = alarmsInVal.map(function(a){return a.descr;}).join(', '); //Alarm 1, Alarm 2, Alarm 4
关于Javascript - 位警报消息 - 获取所有可能的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32226457/