比较8位无符号整数与十六进制失败 我有一个TCP数据段中充满Unt8*t值的C++向量。我特别寻找两个值中的一个,应该在向量的第一个索引处

比较8位无符号整数与十六进制失败 我有一个TCP数据段中充满Unt8*t值的C++向量。我特别寻找两个值中的一个,应该在向量的第一个索引处,c++,hex,unsigned-integer,C++,Hex,Unsigned Integer,我用下面的if语句来表达我的逻辑 if ( ui8BufferIn.at(0) != 0xE4 || ui8BufferIn.at(0) != 0xE2){ printf("\nWe have a problem, no parsing will be done, Package Type = %u\n", ui8BufferIn.at(0)); proceed = false; } 上面的if语句在不应该执行的时候执行。我得到以下打印输出: We have a problem

我用下面的if语句来表达我的逻辑

if ( ui8BufferIn.at(0) != 0xE4 || ui8BufferIn.at(0) != 0xE2){
    printf("\nWe have a problem, no parsing will be done, Package Type = %u\n", ui8BufferIn.at(0));
    proceed = false;
}
上面的if语句在不应该执行的时候执行。我得到以下打印输出:

We have a problem, no parsing will be done, Package Type = 226
所以你不必做数学运算,
226
作为一个十六进制的整数是
0xE2


我在这方面已经有一段时间了,所以它很可能很简单,但任何帮助都将是伟大的

我想你可能希望你的逻辑是:

if ( ui8BufferIn.at(0) != 0xE4 && ui8BufferIn.at(0) != 0xE2){

正如你现在所说的“如果:(它不是
0xE4
)或(它不是
0xE2
),我们有一个问题”——如果我理解正确,这不是你想说的。通过您的语句,您可能会得到
0xE2
,但因为您没有得到
0xE4
ui8BufferIn.at(0)!=0xE4
),您的语句会执行。

我想您可能希望您的逻辑是:

if ( ui8BufferIn.at(0) != 0xE4 && ui8BufferIn.at(0) != 0xE2){

正如你现在所说的“如果:(它不是
0xE4
)或(它不是
0xE2
),我们有一个问题”——如果我理解正确,这不是你想说的。通过您的语句,您可能会得到
0xE2
,但因为您没有得到
0xE4
ui8BufferIn.at(0)!=0xE4
),您的语句会执行。

代码中有一个小的逻辑错误。在这种情况下,您的错误将始终出现。假设
uint8\u t
值为
0xE2
。您将获得以下条件:

if(0xE2 != 0xE4 || 0xE2 != 0xE2)
    //Error
这将评估:

if(true || false) //Actually the second operand will not be evaluated
    //Error
这将执行您的错误条件。实际上,对于任何给定的输入,您的错误函数都将执行。除非您的
uint8\u t
值设法比较等于
0xE2
0xE4
,但据我所知,这样的值目前不存在

最简单的解决方案是将“or”改为“and”,给出以下代码:

if(ui8BufferIn.at(0) != 0xE4 && ui8BufferIn.at(0) != 0xE2)
    //Error

代码中有一个小的逻辑错误。在这种情况下,您的错误将始终出现。假设
uint8\u t
值为
0xE2
。您将获得以下条件:

if(0xE2 != 0xE4 || 0xE2 != 0xE2)
    //Error
这将评估:

if(true || false) //Actually the second operand will not be evaluated
    //Error
这将执行您的错误条件。实际上,对于任何给定的输入,您的错误函数都将执行。除非您的
uint8\u t
值设法比较等于
0xE2
0xE4
,但据我所知,这样的值目前不存在

最简单的解决方案是将“or”改为“and”,给出以下代码:

if(ui8BufferIn.at(0) != 0xE4 && ui8BufferIn.at(0) != 0xE2)
    //Error

你的逻辑是这样的:

If (value is not (value a)) OR (value is not (value b)) then...
让我们看看可能性:

Value = a: then value is not b: result is true
Value = b: then value is not a: result is true
Value = other: the value is not a: result is true

因此if语句的计算结果始终为true,您的逻辑如下所示:

If (value is not (value a)) OR (value is not (value b)) then...
让我们看看可能性:

Value = a: then value is not b: result is true
Value = b: then value is not a: result is true
Value = other: the value is not a: result is true

因此if语句的计算结果总是true

我怀疑您想要的是&而不是| |。事实上,你的情况总是正确的。我怀疑你想要的是&而不是| |。事实上,你的情况总是正确的。没问题,我们都有这样的日子没问题,我们都有这样的日子投票表决。。。我觉得重要的是,这个陈述总是正确的,因为它不能同时是两个谓词都是错误的。。。我觉得重要的是,这个陈述总是正确的,因为它不能同时是两个谓词false。