2

unsigned int と 16 進値があります。unsigned int に 16 進値が含まれているかどうかを確認できるようにしたい。例えば:

unsigned int reason = 0x80020002

#define MAJOR_ERROR_CODE 0x00020000
#define MINOR_ERROR_CODE 0x00000002
#define OPTIONAL_ERROR_CODE 0x80000000

ご覧のとおり、変数 reason には 3 つの #define エラー コードがすべて含まれています。16 進エラー コード int 変数の理由の有無を検出できるようにする必要があります。どうすればいいのですか?

編集1:すべてお詫び申し上げます。単純化して投稿しようとしたときに、少し異なる質問を投稿したと思います。私が持っているのは、いくつかのメジャー、マイナー、およびオプションのエラーコードです-たとえば

#define MAJOR_ERROR_CODE_1 0x00020000
#define MAJOR_ERROR_CODE_2 0x00010000
#define MAJOR_ERROR_CODE_3 0x00070000

#define MINOR_ERROR_CODE_1 0x00000002
#define MINOR_ERROR_CODE_2 0x00000004
#define MINOR_ERROR_CODE_3 0x00000006

#define OPTIONAL_ERROR_CODE_1 0x80000000
#define OPTIONAL_ERROR_CODE_2 0x50000000
#define OPTIONAL_ERROR_CODE_3 0x30000000

unsigned int は、これら 3 つのエラー コードの組み合わせです。これらの各エラー コードには一意の文字列があり、これらのいずれかが変数に存在するかどうかに応じて、文字列を生成する必要があります。

4

5 に答える 5

3

二項演算子を使用する場合&:

if(reason & MAJOR_ERROR_CODE)
{
    // Do Major Error code...    
}

if(reason & MINOR_ERROR_CODE)
{
    // Do minor Error code...    
}

if(reason & OPTIONAL_ERROR_CODE)
{
    // Do Optional error code...    
}
于 2013-05-16T17:51:43.767 に答える
2

これらがシングルビットコードの場合、次のように簡単です

 if ((reason & MAJOR_ERROR_CODE) != 0)
 {
     // this is a major error
 }

しかし、実際にはマスクだと思います。

 #define MAJOR_ERROR_MASK 0x7fff0000
 if ((reason & MAJOR_ERROR_MASK) == MAJOR_ERROR_CODE)
 {
      // this is a major error
 }
于 2013-05-16T17:52:08.377 に答える
0

そのようなもの:

const bool isErrorCodeSet = reason & MAJOR_ERROR_CODE;
//...and so on

これは基本的に手動と操作で機能することがわかります。

  80020002
& 00020000 
------------
  00010000
于 2013-05-16T17:53:04.370 に答える
0

ほとんどの場合、ビットごとのANDを探しています

C++情報はこちら

于 2013-05-16T17:52:17.203 に答える
0

問題が正しいかどうかはわかりませんが、操作で確認できるようです

例えば

((reason & MAJOR_ERROR_CODE) != 0)
{

//Do what you want to do for MAJOR_ERROR_CODE

}

于 2013-05-16T17:54:18.617 に答える