1

私はWindowsデバイスドライバーを使用していますが、次のような構造体コードが表示されました。

struct driver1
{
       UINT64 Readable     : 1; 
       UINT64 Writable     : 1; 
       UINT64 Executable   : 1; 
       UINT64 Control      : 3; 
       UINT64 Status       : 1; 
       UINT64 Reserved     : 51; 
       UINT64 Available1   : 5; 
       UINT64 IsMapped     : 1;
};

それぞれUINT64が単一のビットを表しますか?コロンはビットを表しますか?

4

3 に答える 3

3

これは、、ReadableおよびWritableそれぞれExecutableが少しかかることを意味し、3、51などControlを取りReservedます。

詳細については、 http://publications.gbdirect.co.uk/c_book/chapter6/bitfields.htmlを参照してください。

UINT64は、ビットフィールド全体が64ビットの符号なし整数内にあることを意味します。

于 2011-02-22T18:33:02.237 に答える
3

そうです、そうです。それはビットフィールドと呼ばれます。数値は、コーダーがそのフィールドに取得を要求しているビット数を示します。それらをすべて数えると、合計で64になることがわかります。

問題は、C ++(Adaとは異なり)が構造体全体が64ビットしか使用しないことを保証する実際の方法を提供しないことです。したがって、実行するように設計されたシステム以外のシステムでこれをコンパイルしている場合は、確認してください。

C ++でデバイスドライバーを作成するときは、ビットフィールドを使用しません。代わりにビットマスクを使用します。もちろん、そこでの問題は、プラットフォームがそのバイトをどのように順序付けるかを認識している必要があるということです。

于 2011-02-22T18:35:51.623 に答える
1

これらはCのビットフィールドであるため、構造体を介してこれらのビットに個別にアクセスできます。

于 2011-02-22T18:34:11.230 に答える