代码之家  ›  专栏  ›  技术社区  ›  tinyoverflow

将“二进制”中的值存储并解码为整数

  •  0
  • tinyoverflow  · 技术社区  · 6 年前

    下面的系统是如何调用的?在下面的场景中,实现解码功能的简单算法是什么?

    假设我们有一个具有以下值的许可系统。每个权限节点获取一个具有以下规则的数字:

    • 读取=1
    • 创建=2
    • 更新=4
    • 删除=8

    澄清:我会把许可本身称为 许可 分配给它的号码 价值 . 另外,我会把所有的 价值观 这个 水平 .

    当我想给用户三个权限时 阅读 , 创建 更新 他将达到7级。如果我计算出这7个,我可以肯定地说,这个用户有这3个确切的角色。

    我的问题是:这个系统是如何命名的,什么样的情况才是计算这个值的好方法,也就是说:我怎样才能有效地找出7是由1,2和4组成的,或者13是由1,4和8组成的?我完全不知道从哪里开始。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Barmar    6 年前

    这叫做 位映射 或者 位掩码 . 当用于存储权限时,它被称为 权限掩码 .

    要测试是否设置了特定值,可以使用按位运算符。

    $mask = 7;
    $perms = array();
    if ($mask & READ) {
        $perms[] = "READ";
    }
    if ($mask & CREATE) {
        $perms[] = "CREATE";
    }
    if ($mask & UPDATE) {
        $perms[] = "UPDATE";
    }
    if ($mask & DELETE) {
        $perms[] = "DELETE";
    }
    echo "Permissions are: " . implode(", ", $perms); // prints READ, CREATE, UPDATE