2

我有一个无符号整数和一个十六进制值。我希望能够检查 unsigned int 是否包含十六进制值;例如:

unsigned int reason = 0x80020002

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

现在我们可以看到,变量原因包含所有三个#define 错误代码。我需要能够检测变量原因中十六进制错误代码的存在/不存在。我该怎么做?

编辑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 是这三个错误代码的组合。这些错误代码中的每一个都有一个唯一的字符串,并且取决于我的变量中存在哪一个,我需要生成字符串。

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

我不确定我的问题是否正确,但看起来可以检查 & 操作

例如

((reason & MAJOR_ERROR_CODE) != 0)
{

//Do what you want to do for MAJOR_ERROR_CODE

}

于 2013-05-16T17:54:18.617 回答
0

您最有可能在寻找按位与

C++ 信息在这里

于 2013-05-16T17:52:17.203 回答
0

像这样:

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

您可以通过手动和操作看到这基本上是有效的:

  80020002
& 00020000 
------------
  00010000
于 2013-05-16T17:53:04.370 回答