1

アクセス許可レベルにバイト配列を使用するレガシー システムに取り組んでいます。
例:
00 00 00 00 00 00 00 01 は、「フル コントロール」を持っていることを意味します。
00 00 00 00 00 00 00 02 は、「コントロールを追加」を持って
いることを意味します。

したがって、ユーザーが「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

を使用して、8 バイト配列を ulong 配列に変換することもできますBitConverter.ToUInt64。その後、これらの ulong に対して通常のビット演算を使用しBitConverter.GetBytes、必要に応じて使用して結果をバイト配列に戻すことができます。

アクセス許可を繰り返し処理する必要がある場合は、このための小さなラッパーを実装することをお勧めします。

于 2012-10-18T13:21:10.050 に答える
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 に答える