我有一个unsigned int和一个十六进制值。我希望能够检查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是这三个错误代码的组合。这些错误代码中的每一个都有一个唯一的字符串,并且根据我的变量原因中存在哪一个我需要生成字符串。
答案 0 :(得分: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...
}
答案 1 :(得分: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
}
答案 2 :(得分:0)
您很可能正在寻找bitwise-AND
答案 3 :(得分:0)
像这样:
const bool isErrorCodeSet = reason & MAJOR_ERROR_CODE;
//...and so on
您可以通过手动和操作看到它的工作原理:
80020002
& 00020000
------------
00010000
答案 4 :(得分:0)
我不确定我的问题是否正确,但看起来可以查看&操作
e.g。
((reason & MAJOR_ERROR_CODE) != 0)
{
//Do what you want to do for MAJOR_ERROR_CODE
}
((reason & MAJOR_ERROR_CODE) != 0)
{
//Do what you want to do for MAJOR_ERROR_CODE
}