首页 > 解决方案 > JS逆向工程有点值

问题描述

在学习的辅助项目中,我正在处理以位值表示的东西。我不确定我所做的是否正确。

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

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. 基于此,当我68从数据库返回时,我将如何确定使用了哪两个或三个(可以有两个以上,例如只有两个)?

我的第一次尝试是一个函数,它遍历bitValue对象中的所有值并计算每个值并查看它是否等于数据库中的值。

这里的问题是。如果我在该位字段中有 10 个左右的值,则需要大量计算才能弄清楚。

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

标签: javascriptbit-manipulation

解决方案


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

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);
    }
});


推荐阅读