1

我正在开发一个使用字节数组作为权限级别的遗留系统。
示例:
00 00 00 00 00 00 00 01 表示他们有“完全控制”
00 00 00 00 00 00 00 02 表示他们有“添加控制”
00 00 00 00 00 00 00 04 表示他们有“删除控制”

因此,如果用户拥有“00 00 00 00 00 00 00 07”,则意味着他们拥有全部 3 个(据已向我解释)。

现在,我的问题是我需要知道在创建/检查记录时如何到达“0x07”。
我不知道实际组合 0x01、0x02 和 0x04 的语法,所以我得出了 0x07。

4

3 回答 3

1

你或他们在一起:

0x01 | 0x02 | 0x04 == 0x07

如果要检查候选字节中的各个位b

Full Control   == b & 0x01
Add Control    == b & 0x02
Delete Control == b & 0x04
于 2012-10-17T23:03:50.660 回答
0

OR 运算符是您正在寻找的。

IMO,一种处理它的干净方法是使用枚举:

[Flags]
public enum Permisions
{
    FullControl = 0x1,
    AddControl = 0x2,
    DeleteControl = 0x4
}

然后,在您的代码中,您可以执行以下操作:

Permissions userPermissions = Permissions.AddControl | Permissions.DeleteControl;
bool canDelete = userPermissions.HasFlag(Permissions.DeleteControl);
于 2012-10-17T23:15:35.510 回答
0

您还可以使用BitConverter.ToUInt64. 之后,您将能够对这些 ulong 使用常规的按位运算,并在BitConverter.GetBytes必要时使用将结果转换回字节数组。

如果您必须重复处理权限,您可能希望为此实现一个小型包装器。

于 2012-10-18T13:21:10.050 回答