javascript - 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 个左右的值,则需要大量计算才能弄清楚。
有没有更好的方法来处理这个?
解决方案
您可以迭代这些值并使用组合值执行按位与以进行真实检查。
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);
}
});
推荐阅读
- opencv - 激光雷达到图像投影问题
- java - 使用带有枚举和标记接口的 switch 语句
- javascript - 使用 AsyncStorage 时未加载待办事项
- shell - 想要在 shell 脚本的文本文件中添加标题
- angular - 如何从 Firebase Firestore 获取数据
- javascript - 随机问题生成器仅提示对象数组中的 1 个问题,并退出提示。而是提示所有问题
- flutter - Flutter GetX 状态管理不起作用
- php - 数据库查询中 Where 子句的语法错误
- azure - azure-sdk-for-java eventthubs 分区已丢失
- dataframe - 提取数字超过 N 的特定行