首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS逆向工程的一点价值

JS逆向工程的一点价值
EN

Stack Overflow用户
提问于 2018-07-22 18:49:13
回答 1查看 43关注 0票数 1

为了学习,我在边项目边玩着处理比特值的东西。我不确定我所做的是否正确。

我有一个对象,它包含一个位值列表:

代码语言:javascript
复制
const bitVal = {
   food_item_1: 0x04,
   food_item_2: 0x08,
   food_item_3: 0x40
}

诸若此类。

我有一个操作,当用户选择食物组合时,它会将这些值相加,如下所示

bitValue.food_item_1 | bitValue.food_item_3

然后我会把这个保存在数据库里。

我的问题是,当我得到位值时。怎样才能计算出哪个项目构成了位号?

所以食物项目1和食物项目2= 68。在此基础上,当我从DB获得68时,我如何确定使用了什么二或三个(可能有两个以上,示例只有两个)?

我的第一次尝试是一个函数,它迭代bitValue对象中的所有值并计算每个值,看看它是否等于DB中的值。

这里的问题是。如果我在这个位字段中有10个左右的值,那就需要大量的计算来计算出来。

有没有更好的方法来处理这件事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-22 18:56:10

您可以迭代这些值,并按位执行,并使用合并的值进行真实的检查。

代码语言:javascript
复制
const
    bitVal = { food_item_1: 0x04, food_item_2: 0x08, food_item_3: 0x40 },
    value = 68;
    
Object.entries(bitVal).forEach(([k, v]) => {
    if (v & value) {
        console.log(k);
    }
});

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51468255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档